Десериализация JSON в Django - PullRequest
5 голосов
/ 17 июня 2011

Этот заставил меня выдернуть мои волосы. Последние несколько часов я пытался десериализовать JSON в Django.

У меня есть функция:

    # 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);  
    });

}

И я пытаюсь десериализовать JSON в django:

# 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 ]

15 голосов
/ 17 июня 2011

serializers.deserialize предназначен для десериализации определенного типа JSON, то есть данных, которые были сериализованы из экземпляров модели с использованием serializers.serialize.Для ваших данных вам просто нужен стандартный модуль simplejson.

И второе, что неправильно, это то, что ваш ответ - это не просто JSON - это HTTP POST с JSON в поле data.Итак:

from django.utils import simplejson
data = simplejson.loads(request.POST['data'])
4 голосов
/ 08 мая 2013
from django.core import serializers

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

for obj in obj_generator:                          
    obj.save()

Объекты теперь должны быть сохранены и видимы в django admin

...