6

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

{foo:3}

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

4

3 回答 3

10

您可以使用 YAML (>=1.2),因为它是 JSON 的超集,您可以执行以下操作:

>>> import yaml
>>> s = '{foo: 8}'
>>> yaml.load(s)
{'foo': 8}
于 2012-02-01T23:33:57.887 回答
2

你可以试试demjson

>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}
于 2014-11-26T17:39:40.677 回答
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}'
于 2012-02-01T23:33:48.167 回答