【问题标题】:How to convert a query string to valid json?如何将查询字符串转换为有效的 json?
【发布时间】:2021-06-13 03:47:45
【问题描述】:

有没有一种简单的方法可以将查询参数字符串(例如 'username=andrew&password=password1234')转换为有效的 JSON { "username": "andrew", "password": "password1234" }

我一直在尝试遍历字符串并手动将参数添加到 JSON,但我很想知道是否有更简单的方法或可用的库。

【问题讨论】:

标签: python json django api flask


【解决方案1】:

使用urllib.parse.parse_qsl

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"}'

注意:这是假设只有唯一的键。

【讨论】:

  • 我刚刚注意到你有 flaskdjango 标签 - 也许你的问题还有更多,框架中可能有工具,你应该/可以用来做你想做的事实际上想要实现 - 例如该框架会将您的查询字符串解析为 dict 或类似的。显然是flaskdjango,所以其中一个标签是多余的。
【解决方案2】:

您可以将其解析为将键映射到值列表的字典:

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"}

【讨论】:

  • 非常感谢,这正是我要找的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2021-12-01
  • 2017-06-05
  • 2020-04-10
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多