我想知道是否有一种方法可以解码类JSON字符串。
我得到的字符串是:
'{ hotel: { id: "123", name: "hotel_name"} }'
这不是一个有效的JSON字符串,所以我无法直接使用Python API解码它。 Python只接受类似于字符串化的JSON字符串:
'{ "hotel": { "id": "123", "name": "hotel_name"} }'
属性应该用引号括起来表示为字符串。
我想知道是否有一种方法可以解码类JSON字符串。
我得到的字符串是:
'{ hotel: { id: "123", name: "hotel_name"} }'
这不是一个有效的JSON字符串,所以我无法直接使用Python API解码它。 Python只接受类似于字符串化的JSON字符串:
'{ "hotel": { "id": "123", "name": "hotel_name"} }'
属性应该用引号括起来表示为字符串。
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'}}
@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?': ''}]
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
不太优雅也不够健壮(容易出问题),但是可能可以通过类似以下的方法来解决:
kludged = re.sub('(?i)([a-z_].*?):', r'"\1":', string)
# { "hotel": { "id": "123", "name": "hotel_name"} }
parsePythonValue.py
示例也可以实现你想要的功能...(或者很容易地进行修改),或者可以修改jsonParser.py
以不需要引号括起来的键值。