Python: 如何将查询字符串转换为JSON字符串?

20

我想要将这样的查询字符串进行转换:

a=1&b=2

转换为JSON字符串

{"a":1, "b":2}

有现成的解决方案吗?


2
请尝试访问 http://pypi.python.org/pypi/jsonurl/1.0.0 - jeremy
希望这可以帮助到你。 https://dev59.com/5lXTa4cB1Zd3GeqPzC_n - Pradeeshnarayan
5个回答

48

Python 3+

import json
from urllib.parse import parse_qs

json.dumps(parse_qs("a=1&b=2"))

Python 2:

import json
from urlparse import parse_qs

json.dumps(parse_qs("a=1&b=2"))

在这两种情况下,结果都是相同的。

'{"a": ["1"], "b": ["2"]}'

这实际上比你的{"a":1, "b":2}更好,因为URL查询字符串可以合法地包含相同的键多次,即每个键对应多个值。


1
换句话说,将qs转换为字典,然后将该字典转换为JSON。 - John La Rooy
11
对于Python 3用户:urlparse现在被称为urllib.parse - Curtis Fenner
3
可以将代码中的 import urllib.parse as urlparse 改为 from urllib import parse as urlparse,这样可以不影响代码其他部分。 - Tomalak
2
如果需要将参数解析为单个值,则可以使用 parse_qsl - dict(urlparse.parse_qsl('a=1&b=2'))输出:'{"a": ["1"], "b": ["2"]}' - Nikhil Prakash

7
>>> strs="a=1&b=2"

>>> {x.split('=')[0]:int(x.split('=')[1]) for x in strs.split("&")}
{'a': 1, 'b': 2}

1
@BinChen 没有语法错误。你使用的是哪个版本的Python? - Ashwini Chaudhary
此语法可在Python 2.7+和3+中使用。 在2.6及更早版本中请使用 d = dict((key, value) for (key, value) in iterable) - Moberg

6

Python 3.x

from json import dumps
from urllib.parse import parse_qs

dumps(parse_qs("a=1&b=2"))

yelds

{"b": ["2"], "a": ["1"]}

0
dict((itm.split('=')[0],itm.split('=')[1]) for itm in qstring.split('&'))

0
在Python 2和3中:
import json

def parse_querystring(query_string):
    variables = dict()

    for item in query_string.split('&'):
        key, value = item.split('=')

        # if value is an int, parse it
        if value.isdigit():
            value = int(value)

        variables[key] = value

    return variables


query_string = 'user=john&uid=10&mail=john@doe.com'
qs = parse_querystring(query_string)

print(repr(qs))
print(json.dumps(qs))

结果是
{'user': 'john', 'uid': 10, 'mail': 'john@doe.com'}
{"user": "john", "uid": 10, "mail": "john@doe.com"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接