所以我得到了答复并打印出来。结果是字节:
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']一样引用。我在做什么错或不做什么?
答案 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}