在Django中反序列化JSON

Tem*_*muz 6 django json deserialization

这个让我拉出我的头发.在过去的几个小时里,我一直在尝试在Django中反序列化JSON.

我有一个功能:

    # in index.html
    function updateWidgetData(){  
        var items=[]; 
        for statement here:
            for statement here:
                var item={  
                    id: $j(this).attr('id'),  
                    collapsed: collapsed,  
                    order : i,  
                    column: columnId  
                };  
        items.push(item);  

        var sortorder={ items: items};  

        $j.post('2', 'data='+$j.toJSON(sortorder), function(response)
        {  
            if(response=="success")  
                $j("#console").html('<div class="success">Saved</div>').hide().fadeIn(1000);  
            setTimeout(function(){  
                $j('#console').fadeOut(1000);  
        }, 2000);  
    });

}
Run Code Online (Sandbox Code Playgroud)

我正试图在django中反序列化JSON:

# in views.py
if request.is_ajax():
    for item in serializers.deserialize("json", request.content):
        item = MyObject(id=id, collapsed=collapsed, order=order, column=column)
    return HttpResponse("success")
else:
    ....
Run Code Online (Sandbox Code Playgroud)

它一直没有奏效.我知道这可能是一个非常微不足道的问题,但我以前从未使用过JSON,我真的很感激一些帮助.谢谢!

Dan*_*man 17

serializers.deserialize用于反序列化特定类型的JSON - 即,使用模型实例序列化的数据serializers.serialize.对于您的数据,您只需要标准simplejson模块.

第二件事是错误的是你的回复不仅仅是JSON - 它是一个带有JSON的HTTP POST data.所以:

from django.utils import simplejson
data = simplejson.loads(request.POST['data'])
Run Code Online (Sandbox Code Playgroud)

  • [自Django 1.5](https://docs.djangoproject.com/en/dev/releases/1.5/#system-version-of-simplejson-no-longer-used)你宁愿使用[python`json`模块(https://docs.python.org/3/library/json.html#module-json) (3认同)

Arp*_*ngh 5

from django.core import serializers

obj_generator = serializers.json.Deserializer(request.POST['data'])

for obj in obj_generator:                          
    obj.save()
Run Code Online (Sandbox Code Playgroud)

对象现在应该被保存并在 django admin 中可见