QueryDict to string丢失JSON中的列表

far*_*odg 4 python django json

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

{
"message": "Hello!",
"people": ["Aaron", "Randy", "Chris", "Andrew"]
}
Run Code Online (Sandbox Code Playgroud)

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

'{"message": "Hello!", "people": "Andrew"}'
Run Code Online (Sandbox Code Playgroud)

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

mha*_*wke 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"]}'
Run Code Online (Sandbox Code Playgroud)

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

>>> 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"]}'
Run Code Online (Sandbox Code Playgroud)