我有兴趣simplejson.loads()
成功解析以下内容:
{foo:3}
它抛出了一个JSONDecodeError
说法“期望属性名称”,但实际上它是在说“我需要在我的属性名称周围加上双引号”。这对我的用例来说很烦人,我更喜欢不那么严格的行为。我已经阅读了文档,但除了制作我自己的解码器类之外,我没有看到任何明显改变这种行为的东西。
我有兴趣simplejson.loads()
成功解析以下内容:
{foo:3}
它抛出了一个JSONDecodeError
说法“期望属性名称”,但实际上它是在说“我需要在我的属性名称周围加上双引号”。这对我的用例来说很烦人,我更喜欢不那么严格的行为。我已经阅读了文档,但除了制作我自己的解码器类之外,我没有看到任何明显改变这种行为的东西。
您可以使用 YAML (>=1.2),因为它是 JSON 的超集,您可以执行以下操作:
>>> import yaml
>>> s = '{foo: 8}'
>>> yaml.load(s)
{'foo': 8}
你可以试试demjson。
>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}
不,这是不可能的。要使用 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}'