데이터베이스에서 json 형식의 텍스트를 가져오고 있습니다. 기본적으로 TEXT 필드를 사용하여 웹 사이트에서 DB로 API 콘텐츠를 덤프합니다.
json 콘텐츠에 문제 / 오류가없는 것을 볼 수 있지만 ..
try:
get_all = db.query("SELECT id, name, api_content FROM _books")
_result = get_all.fetchall()
except Exception as e:
print("[e::line-163] ", e)
try:
for r in _result:
api_content = r[2]
j = json.loads(api_content)
print('names, ', j['names'])
이 오류가 발생합니다.
큰 따옴표로 묶인 예상 속성 이름 : 줄 1 열 2 (문자 1)
는 api_content
그것을 잘 형성 JSON 내용이며, 어떤 문제가 없습니다.
.NET에서 유효한 JSON이 있다고 생각하지 않습니다 api_content
. 오류가 무엇인지 판단하면 속성 (키)이 작은 따옴표로 묶여 있지만 유효한 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()
경우을 사용하여 api 콘텐츠를 안전하게 평가 해보십시오 .
from ast import literal_eval
for r in _result:
api_content = r[2]
j = literal_eval(api_content)
print('names, ', j['names'])
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다