有没有办法让simplejson不那么严格?

时间:2012-02-01 23:23:33

标签: python json simplejson

我有兴趣让simplejson.loads()成功解析以下内容:

{foo:3}

它抛出一个JSONDecodeError说“期待属性名称”,但实际上它说的是“我的属性名称需要双引号”。这对我的用例很烦人,我更喜欢不太严格的行为。我已经阅读了文档,但除了制作我自己的解码器类之外,我没有看到任何明显改变这种行为的东西。

3 个答案:

答案 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}'