将字符串键和列表值的字典序列化为JSON
我想把一个Python字典转换成JSON格式,然后传回给JavaScript。这个字典的键是字符串类型,而值是一个列表(也就是[])。
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和name都转换成JSON格式,然后传回给JavaScript。
我对Python和Django还很陌生,如果你有更好的方法,请告诉我,非常感谢! :)
2 个回答
0
你应该使用Python的json模块来处理你的JSON数据。
另外,你的data = serializers
这一行代码的缩进级别是多少呢?看起来它可能是在一个循环里面?
1
你的'groups'变量是一个查询集对象,而不是一个字典。你需要更明确地说明你想要返回的数据。
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': []
}]
或者如果你只想要一组组名的话,可以得到这样的结果:
[{ 'groupA': ['item-1'],
'groupB': ['item-2', ...],
'groupC': []
}]