当某些值包含单引号时将字符串加载到字典中

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