我想知道是否有解碼類似JSON的字符串的方法。如何在Python中解碼無效的json字符串
我得到的字符串:
'{ hotel: { id: "123", name: "hotel_name"} }'
這不是一個有效的JSON字符串,所以我不能直接使用Python API進行解碼。 Python將只接受一個字符串化JSON字符串,如:
'{ "hotel": { "id": "123", "name": "hotel_name"} }'
,其屬性引用是一個字符串。
我想知道是否有解碼類似JSON的字符串的方法。如何在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引擎,like 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
不是很優雅,而不是穩健的(不易破損),但有可能以雜牌它的東西,如:
kludged = re.sub('(?i)([a-z_].*?):', r'"\1":', string)
# { "hotel": { "id": "123", "name": "hotel_name"} }
您可能會發現使用pyparsing和parsePythonValue.py
例子可以做你想做以及什麼...(或者很容易修改,這樣做)或jsonParser.py
可以修改不需要引用鍵值。
從downvoter的解釋將是很好... –
@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?': ''}]
不知道該模塊 - 必須檢查那出來+ 1 –
整潔,會用這個模塊! +1。 – Aesthete
蟒蛇自定義模塊的海.... – u8y7541