我正在做一件非常類似於this user was doing的東西:嘗試將一個javascript對象聲明加載到python字典中。但是,與該用戶不同,屬性名稱不包含在引號中。解析不使用字符串屬性名稱的javascript對象聲明
>>> simplejson.loads('{num1: 1383241561141, num2: 1000}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/lalalal/site-packages/simplejson/__init__.py", line 385, in loads
return _default_decoder.decode(s)
File "/Users/lalalal/site-packages/simplejson/decoder.py", line 402, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/lalalal/site-packages/simplejson/decoder.py", line 418, in raw_decode
obj, end = self.scan_once(s, idx)
simplejson.decoder.JSONDecodeError: Expecting property name: line 1 column 1 (char 1)
這將會是剛剛輝煌,如果我有正確的JSON對象:
>>> simplejson.loads('{"num1": 1383241561141, "num2": 1000}')
{'num1': 1383241561141, 'num2': 1000}
但是,我不知道。我該如何解決這個問題?也許它歸結爲像正則表達式一樣簡單?
編輯:This regex說的Martijn寫有我一半了,只是如果我有這發生在我的一些示例數據,例如的括號後尾隨空白不起作用{ num1: 1383241561141, num2: 1000}'
我會使用正則表達式來引用鍵,然後將其解析爲JSON。 (/,(\ w)+:/ g,',「$ 1」:'),然後使用字符串方法手動清理第一個和最後一個鍵的字符串。這樣,JSON仍然可以完成繁重的工作,而且您只需要以可預測的方式清理一些可預測的字符串。 – dandavis
@dandavis這段代碼應該是什麼?調用're.sub'? – 2rs2ts
它的參數調用JS的替換方法。 python應該有一些相關的東西,從我使用python的時候就已經很久了,原諒了我。 – dandavis