繁体   English   中英

如何在python中解码无效的json字符串

[英]How to decode an invalid json string in python

我想知道是否有一种方法可以解码类似JSON的字符串。

我得到了字符串:

'{ hotel: { id: "123", name: "hotel_name"} }'

这不是有效的JSON字符串,因此我无法直接使用python API对其进行解码。 Python将仅接受字符串化的JSON字符串,例如:

 '{ "hotel": { "id": "123", "name": "hotel_name"} }'

其中属性被引用为字符串。

使用demjson模块,该模块具有在非严格模式下解码的能力。

In [1]: import demjson
In [2]: demjson.decode('{ hotel: { id: "123", name: "hotel_name"} }')
Out[2]: {u'hotel': {u'id': u'123', u'name': u'hotel_name'}}

您可以尝试为JavaScript引擎使用包装器, 例如pyv8

import PyV8
ctx = PyV8.JSContext()
ctx.enter()
# Note that we need to insert an assignment here ('a ='), or syntax error.
js = 'a = ' + '{ hotel: { id: "123", name: "hotel_name"} }'
a = ctx.eval(js)
a.hotel.id
>> '123' # Prints

@vartec已经指出了demjson ,它对于稍微无效的JSON非常有效。 对于甚至不符合JSON要求的数据,我已经编写了barely_json

from barely_json import parse
print(parse('[no, , {complete: yes, where is my value?}]'))

版画

[False, '', {'complete': True, 'where is my value?': ''}]

不是很优雅,也不健壮(并且很容易打破),但是可能会出现如下问题:

kludged = re.sub('(?i)([a-z_].*?):', r'"\1":', string)
# { "hotel": { "id": "123", "name": "hotel_name"} }

您可能会发现,使用pyparsingparsePythonValue.py示例也可以实现您想要的...(或相当容易地进行修改)或可以将jsonParser.py修改为不需要加引号的键值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM