반응형
Error:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 366 (char 365)
Json으로 데이터를 load하여 parsing할 때 발생할 수 있는 에러이다.
api의 결과값을 잘 가져와 값을 수신한 것처럼 보이는데 막상 json.loads로 파싱해보면 에러가 나는 경우가 많다.
위의 에러 또한 json 데이터를 파싱할 때 나온 에러이다.
직관적으로 해당 string 데이터의 해당 위치의 +- 5 이내로 print하여 보면 어떠한 문자가 빠졌는지 알 수 있다.
하지만 나는 json 데이터 사용에 익숙하지 않아서인지 이 방식만으로는 아래와 같이 출력되어 발견하기 힘들었다.
print(str(soup)[360:375])
# .7"},{"mgtno":"
그래서 jsonlint 홈페이지의 도움을 받아 해결하였다.
여기서 내가 받은 데이터를 넣고 validate json을 했더니 Expecting 'STRING', got '{' 와 같은 에러가 출력되었다.
이를 토대로 아래 코드로 수정하여 해결하였다. 코드는 python으로 작성되었다.
# -*- coding: utf-8 -*-
import json
import pandas as pd
import requests
def parse_json(url, cert_key):
url = url \
+ "mgtNo=ME2007E008" \
+ "&type=json" \
+ "&serviceKey=" + cert_key
req = requests.get(url)
html = req.text
data = str(html).replace("body\":", "body\":[").replace("}}}", "}]}}")
jsonObject = json.loads(str(data))
df = pd.json_normalize(jsonObject["response"]["body"]) # Results contain the required data
return df
반응형