使用字符串键序列化Dictionary,将List []值序列化为JSON

时间:2010-04-12 14:40:16

标签: python ajax django json serialization

如何将python Dictionary序列化为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应该有“name”,而不是只有Id,在这种情况下,Id是13。

我需要将组名称以及group_item的Id和名称序列化为JSON并传回javascript。

我是Python和Django的新手,如果你有更好的方法,请告诉我,欣赏。非常感谢。 :)

2 个答案:

答案 0 :(得分: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': []
}]

答案 1 :(得分:0)

您应该使用Python的json模块对您的JSON进行编码。

另外,您有data = serializers的缩进级别?看起来它可能在for循环中?

相关问题