有没有一种简单的方法可以将查询参数字符串(例如
'username=andrew&password=password1234'
)转换为有效的JSON{ "username": "andrew", "password": "password1234" }
我一直在尝试遍历字符串并手动向 JSON 添加参数,但我很想知道是否有更简单的方法或可用的库。
您可以将其解析为将键映射到值列表的字典:
from urllib.parse import parse_qs
data = parse_qs('username=andrew&password=password1234')
这会给我们:
>>> parse_qs('username=andrew&password=password1234')
{'username': ['andrew'], 'password': ['password1234']}
这是因为一个键可以出现多次。如果您确定每个键只出现一次,您可以使用字典理解将其转换为单个项目:
from urllib.parse import parse_qs
data = { k: v
for k, vs in parse_qs('username=andrew&password=password1234').items()
for v in vs
}
这会产生:
>>> { k: v
... for k, vs in parse_qs('username=andrew&password=password1234').items()
... for v in vs
... }
{'username': 'andrew', 'password': 'password1234'}
json.dumps(…)
[python-doc] 将其转换为 JSON blob:
>>> print(dumps(data))
{"username": "andrew", "password": "password1234"}
import urllib.parse
import json
spam = 'username=andrew&password=password1234'
eggs = urllib.parse.parse_qsl(spam)
print(eggs)
foo = dict(eggs) # dict
print(foo)
bar = json.dumps(foo) # JSON string
print(repr(bar))
输出
[('username', 'andrew'), ('password', 'password1234')]
{'username': 'andrew', 'password': 'password1234'}
'{"username": "andrew", "password": "password1234"}'
注意:这是假设只有唯一键。