我有一个来自外部输入源的以下JSON字符串:
{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}
这是错误格式的JSON字符串(“id”和“value”必须在引号中),但无论如何我需要解析它。我尝试过simplejson和json-py,似乎无法设置它们来解析这些字符串。
我在Google App引擎上运行Python 2.5,因此任何基于C的解决方案(如python-cjson)都不适用。
输入格式可以更改为XML或YAML,与上面列出的JSON相对应,但我在项目中使用JSON并且在特定位置更改格式不会很好。
现在我已经切换到XML并成功解析数据,但期待任何允许我切换回JSON的解决方案。
答案 0 :(得分:42)
因为YAML(> = 1.2)是JSON的超集,所以你可以这样做:
>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}
答案 1 :(得分:19)
您可以使用demjson。
>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}
答案 2 :(得分:1)
你可以先使用一个字符串解析器来修复它,正则表达式可以做到这一点,只要它和JSON一样复杂。
答案 3 :(得分:0)
Pyparsing包含一个JSON解析器示例,这里是online source。您可以修改memberDef的定义以允许成员名称的非引用字符串,然后您可以使用它来解析您的不完全JSON源文本。
This page也有信息和我在2008年8月的Python杂志上发表的文章的链接,其中有关于这个解析器的更多详细信息。该页面显示了一些示例JSON,以及访问已解析结果的代码,就像它是反序列化对象一样。