在Django中反序列化JSON

时间:2011-06-17 19:00:13

标签: 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);  
    });

}

我正试图在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:
    ....

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

2 个答案:

答案 0 :(得分:15)

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

第二件事是错误的是你的回复不仅仅是JSON - 它是data字段中带有JSON的HTTP POST。所以:

from django.utils import simplejson
data = simplejson.loads(request.POST['data'])

答案 1 :(得分:4)

from django.core import serializers

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

for obj in obj_generator:                          
    obj.save()

现在应该保存对象并在django admin

中可见