Сериализация словаря со строковым ключом и значением List [] в формате JSON - PullRequest
0 голосов
/ 12 апреля 2010

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

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.

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

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

Ответы [ 2 ]

1 голос
/ 12 апреля 2010

Ваша переменная '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': []
}]
0 голосов
/ 12 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...