如何将数据转换成JSON字典?

时间:2018-11-23 09:03:12

标签: python json

所以我得到了答复并打印出来。结果是字节:

payload = request.body
print (payload)
b'a=123&b=345&c=678&d=910'

我将其解码,结果是:

dataform = payload.decode('utf-8').replace("'", '"')
print(dataform, 'dataform')
a=123&b=345&c=678&d=910

我将其转储,结果是:

result = json.dumps(dataform, indent=4, sort_keys=True)
print(result, 'result')
"a=123&b=345&c=678&d=910"

我加载了它,结果是:

jason = json.loads(result)
print(jason, 'jason')
a=123&b=345&c=678&d=910

我只想要一个普通的json字典,可以像data ['string']一样引用。我在做什么错或不做什么?

3 个答案:

答案 0 :(得分:2)

这里有一些错误。

首先,转储为JSON,然后再次加载它绝对没有任何作用(它确实有一些副作用,但这并不重要)。

第二,主要是您的输入数据不是JSON-它是查询字符串,或者更可能是表单数据。

您可以尝试使用parse_qs中的标准urllib.parse对其进行解析,但是如果失败,则必须四处寻找可以处理适当表单数据的库。

In [1]: from urllib.parse import parse_qs

In [2]: payload = b'a=123&b=345&c=678&d=910'

In [3]: dataform = payload.decode('utf-8').replace("'", '"')

In [4]: result = parse_qs(dataform)

In [5]: print(result)
{'a': ['123'], 'b': ['345'], 'c': ['678'], 'd': ['910']}

答案 1 :(得分:1)

import json
from urllib.parse import parse_qs

payload = request.body
# b'a=123&b=345&c=678&d=910'

qs = parse_qs(payload.decode())
# {'a': ['123'], 'b': ['345'], 'c': ['678'], 'd': ['910']}

转换列表值并将数据转换为JSON

json.dumps({k: v[0] for k, v in qs.items()})
# '{"a": "123", "b": "345", "c": "678", "d": "910"}'

答案 2 :(得分:1)

首先,您需要将字符串转换为字符串(以示例为例,但是可以使用所需的字符串)

data = [x.split('=') for x in data.split('&')]
>>> data
[['a', '123'], ['b', '345'], ['c', '678'], ['d', '910']]

然后,您可以轻松创建字典。

dict = {key: value for (key,value) in data}
>>> dict
{'a': '123', 'c': '678', 'b': '345', 'd': '910'}

或者如果要将数字存储为int:

dict = {key: int(value) for (key,value) in data}
>>> dict
{'a': 123, 'c': 678, 'b': 345, 'd': 910}