我不認爲你在api_content
有一個有效的JSON。根據錯誤的內容來判斷,你的屬性(鍵)用單引號引起來,但是需要用雙引號括起來纔是有效的JSON。
這裏是正在發生的事情:
>>> import json
>>> json.loads('{"key": "value"}') # <- VALID JSON
{'key': 'value'}
>>> json.loads("{'key': 'value'}") # <- INVALID JSON
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
換句話說,你應該修改你轉儲API內容到數據庫的方式。看起來你只是寫了Python字典對象的字符串表示,而不是使用json.dumps()
。
如果你不能改變這種狀況,嘗試使用ast.literal_eval()
安全EVAL API的內容:
from ast import literal_eval
for r in _result:
api_content = r[2]
j = literal_eval(api_content)
print('names, ', j['names'])
我想這可能是它,我只是分貝,一切都在單引號。有沒有辦法解決這個問題? –
@ soni-b3196413我會修改/修復你將api內容轉儲到數據庫(json.dump(s))的方式。如果你不能改變它,你可以嘗試通過['ast.literal_eval()'](https://docs.python.org/3/library/ast.html#ast.literal_eval)加載api內容。 – alecxe
所以,你說在將'api_content'提交給數據庫之前,有一種方法可以使用'json.dump'修復引號?如果是這樣的話,那會更好,因爲我將嘗試替換字符串..這將是很多工作。你能舉一個例子嗎?對不起,我在python中爲0 –