开发环境: centOS python2.7 Django框架
今天调试web网站时,前端以ajax的post发出请求, 后端以json格式返回字典
applist = {'0':[], '1':[], '2':[], '3':[], '4':[], '5':[]}
读取用户应用列表,切割成数组赋值给字典applist,以json返回给前端
for appitem in myapplist:
tmplist = []
if appitem.allapp != '':
tmplist = appitem.allapp.split('_')
applist[appitem.position] = tmplist
return JsonResponse({'ret':0,'content':applist})
前端收到的结果:
{"content": {"3": ["1"], "1": [], "0": [], "3": [], "2": [], "5": [], "4": []}, "ret": 0}
居然有两个key是"3"~ 虽然我刚学python,但也不能欺负我啊~
求各位科普
字典中,键值对的键是唯一的哦
字符串"3"
和数字3
是不同的key哦,序列化成标准json格式字符串之后所有的key都会转化为str
>>> from json import dumps
>>> dumps({1: 1, "1": 1})
'{"1": 1, "1": 1}'
这个地方是蛮容易出问题的。Python中,键是unique的,但键可以有不同的类型,如xelz给出的,一个是字符串类型,一个是整型。而在json数据格式定义中,规定了键必须是字符串类型,但并没有规定键是unique的,所以在不同的json库中,可能有些要求unique,有些不要求unique。不过最好还是不要出现这种情况。在Python的json标准库中,当把Python字典转为json字符串时,允许有重复的键,而将json字符串转为Python字典时,如果字符串中有重复的键,那只保留最后一个键值对。个人建议,如果要将Python字典转为json,那最好字典的键都用字符串类型,这样就没有下面的问题了。
>>> import json
>>> a = {1: 20, "1": 40}
>>> b = json.dumps(a)
>>> b
'{"1": 40, "1": 20}'
>>> c = json.loads(b)
>>> c
{u'1': 20}
>>>