当某些值包含单引号时将字符串加载到字典中
Load string into dictionary when some values contain single quotes
我有一个字符串需要加载到字典中。我正在尝试使用 json.loads()
来执行此操作,但它失败了,因为我需要用双引号替换单引号,因为默认情况下,字符串使用单引号来包装 属性 名称和值,尽管在在某些情况下,该值包含在双引号中,因为它包含一个单引号。
这是一个使用 Python3.8
的可重现示例
>>> import json
>>> example = "{'msg': \"I'm a string\"}"
>>> json.loads(example.replace("'", '"'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.8/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 12 (char 11)
有没有更好的方法将字符串加载到字典中? json
模块似乎只能使用双引号,因为这在这里是不可能的(我无法控制字符串的格式),因此我不得不使用不可靠的 replace
。
我想要的结果是有这样一本字典。
{'msg': "I'm a string"}
使用ast.literal_eval()
Docs:
>>> import ast
>>> ast.literal_eval(example)
{'msg': "I'm a string"}
我有一个字符串需要加载到字典中。我正在尝试使用 json.loads()
来执行此操作,但它失败了,因为我需要用双引号替换单引号,因为默认情况下,字符串使用单引号来包装 属性 名称和值,尽管在在某些情况下,该值包含在双引号中,因为它包含一个单引号。
这是一个使用 Python3.8
的可重现示例>>> import json
>>> example = "{'msg': \"I'm a string\"}"
>>> json.loads(example.replace("'", '"'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.8/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 12 (char 11)
有没有更好的方法将字符串加载到字典中? json
模块似乎只能使用双引号,因为这在这里是不可能的(我无法控制字符串的格式),因此我不得不使用不可靠的 replace
。
我想要的结果是有这样一本字典。
{'msg': "I'm a string"}
使用ast.literal_eval()
Docs:
>>> import ast
>>> ast.literal_eval(example)
{'msg': "I'm a string"}