QueryDict to string丢失JSON中的列表

时间:2015-02-20 04:39:44

标签: python json django

我的请求是QueryDict类型,我想将其转换为JSON对象或字符串,以便我可以针对JSON模式对其进行验证。其中一个JSON字段包含一个列表,如下所示:

{
"message": "Hello!",
"people": ["Aaron", "Randy", "Chris", "Andrew"]
}

当我使用json.dumps()将其转换为字符串时,请获取以下内容:

'{"message": "Hello!", "people": "Andrew"}'

处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:8)

将您的QueryDict转换为标准Python dict,并在生成的json.dumps()上致电dict

import json
from django.http import QueryDict

qd = QueryDict('people=Aaron&people=Randy&people=Chris&people=Andrew&message=Hello!')

>>> qd
<QueryDict: {u'message': [u'Hello!'], u'people': [u'Aaron', u'Randy', u'Chris', u'Andrew']}>
>>> json.dumps(qd)
'{"message": "Hello!", "people": "Andrew"}'
>>> json.dumps(dict(qd))
'{"message": ["Hello!"], "people": ["Aaron", "Randy", "Chris", "Andrew"]}'

如果您不喜欢将单个值表示为列表的键,则可以执行以下操作:

>>> d = {k:v if len(v) > 1 else v[0] for k,v in qd.iterlists()}
>>> json.dumps(d)
'{"message": "Hello!", "people": ["Aaron", "Randy", "Chris", "Andrew"]}'