我有兴趣让simplejson.loads()
成功解析以下内容:
{foo:3}
它抛出一个JSONDecodeError
说“期待属性名称”,但实际上它说的是“我的属性名称需要双引号”。这对我的用例很烦人,我更喜欢不太严格的行为。我已经阅读了文档,但除了制作我自己的解码器类之外,我没有看到任何明显改变这种行为的东西。
答案 0 :(得分:10)
您可以使用YAML(> = 1.2),因为它是JSON的超集,您可以这样做:
>>> import yaml
>>> s = '{foo: 8}'
>>> yaml.load(s)
{'foo': 8}
答案 1 :(得分:2)
您可以尝试demjson。
>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}
答案 2 :(得分:1)
不,这是不可能的。要使用simplejson成功解析它,首先需要将其转换为有效的JSON字符串。
根据传入字符串格式的严格程度,这可能非常简单或非常复杂。
对于一个简单的情况,如果你总是有一个JSON对象只有键(没有引号)和整数作为值的字母和下划线,你可以使用以下内容将其转换为有效的JSON:
import re
your_string = re.sub(r'([a-zA-Z_]+)', r'"\1"', your_string)
例如:
>>> re.sub(r'([a-zA-Z_]+)', r'"\1"', '{foo:3, bar:4}')
'{"foo":3, "bar":4}'