2010-04-12 7 views
0

Как я могу сериализовать словарь Python в JSON и передать обратно в javascript, который содержит строковый ключ, тогда как значение представляет собой List (т.е. [])Сериализовать словарь со строковым ключом и значением List [] для JSON

if request.is_ajax() and request.method == 'GET': 

    groupSet = GroupSet.objects.get(id=int(request.GET["groupSetId"])) 
    groups = groupSet.groups.all() 

    group_items = [] #list 
    groups_and_items = {} #dictionary 

    for group in groups: 
     group_items.extend([group_item for group_item in group.group_items.all()]) 
     #use group as Key name and group_items (LIST) as the value 
     groups_and_items[group] = group_items 

    data = serializers.serialize("json", groups_and_items) 

return HttpResponse(data, mimetype="application/json") 

результат:

[{"pk": 5, "model": "myApp.group", "fields": {"name": "\u6fb4\u9584", "group_items": [13]}}] 

в то время как group_items должны иметь много group_item и каждый group_item должен иметь "имя", а не только Id, в этом случае Id является 13.

I необходимость для сериализации имени группы, а также идентификатора и имени group_item как JSON и возврата к javascript.

Я новичок в Python и Django, пожалуйста, советую мне, если у вас есть лучший способ сделать это, оцените. Огромное спасибо. :)

ответ

0

Для кодирования вашего JSON вы должны использовать модуль json Python.

Кроме того, какой уровень отступов у вас есть data = serializers? Похоже, он может быть внутри цикла for?

+0

извините линия: данных = serializers.serialize ("JSON", groups_and_items) должен быть такого же уровня, как и для цикла, немного сложнее вставить код здесь. – Patrick

+0

Кстати, что отличает: json.dumps И serializers.serialize («json», что-то)? – Patrick

+0

И возможно ли, что ключ может быть другим типом (например, пользовательский тип, а не строка?) В этом случае я использую «группу» в качестве ключа, который не является строкой, я ошибочно называю заголовок этот пост, извините за это! – Patrick

1

Ваша переменная 'groups' - это объект QuerySet, а не dict. Вы хотите более четко указать данные, которые хотите вернуть.

import json 
groups_and_items = {} 
for group in groups: 
    group_items = [] 
    for item in group.group_items.all(): 
     group_items.append({'id': item.id, 'name': item.name}) 
    # <OR> if you just want a list of the group_item names 
    #group_items = group.group_items.all().values_list('name', flat=True) 
    groups_and_items[group.name] = group_items 
data = json.dumps(groups_and_items) 

Что именно вы хотите, чтобы ваши данные выглядели? Выше должно дать вам data так:

[{ 'groupA': [{'id': 1, 'name': 'item-1'}], 
    'groupB': [{'id': 2, 'name': 'item-2'}, ...], 
    'groupC': [] 
}] 

Или это, если вы просто хотите, список имен group_item:

[{ 'groupA': ['item-1'], 
    'groupB': ['item-2', ...], 
    'groupC': [] 
}] 
Смежные вопросы