我想用双引号将字符串转换成字典
这里有一个例子
"{'a':'b'}"
我尝试用json.dumps替换但是没有解析
a = "{'a':'b'}"
b = a.replace("'", """) # '{"id":"b"}'
c = json.dumps(c, ensure_ascii=False) # '"{"id\":"b"}"'
我想这样解决
{"a":"b"}
我如何解决它?
这不是JSON。
>>> import json
>>> foo = "{'a':'b'}"
>>> json.loads(foo)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.9/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
但是它看起来很像python
>>> import ast
>>> ast.literal_eval(foo)
{'a': 'b'}
这是否适用于你取决于这个字符串来自哪里以及它的序列化规则是什么。
json.dumps
获取一个结构并将其转储为JSON。您需要json.loads
,它接受一个JSON字符串并将其加载到一个结构中。
>>> json.loads(a.replace("'", '"'))
{'a': 'b'}
根据a
中的单引号,它更像是Python字典而不是JSON对象,所以您可能想要ast.literal_eval()
。
>>> import ast
>>> a = "{'a':'b'}"
>>> ast.literal_eval(a)
{'a': 'b'}