这个让我拉出我的头发。在过去的几个小时里,我一直在尝试在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,我真的很感激一些帮助。谢谢!
答案 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()