개요
2021.11.01 - [Python] JSON 데이터 다루기에서 정리했던 대로 다음과 같은 코드로 JSON 형식 데이터를 Python으로 읽고 다루려고 한다.
import json
file_path = 'test.json'
with open(file_path, 'r') as f:
json_obj = json.load(f)
근데 실행했더니 에러가 발생하면서 실패했다.
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 221)
읽을 JSON 파일을 확인해보니 각각의 줄은 유효한 JSON 데이터였으나, 전체적으로는 목록이나 객체 정의가 없어 유효한 JSON 형식의 데이터가 아니었다.
{"votes": {"funny": 2, "useful": 5, "cool": 1}, "user_id": "harveydennis", "name": "Jasmine Graham", "url": "http://example.org/user_details?userid=harveydennis", "average_stars": 3.5, "review_count": 12, "type": "user"}
{"votes": {"funny": 1, "useful": 2, "cool": 4}, "user_id": "njohnson", "name": "Zachary Ballard", "url": "https://www.example.com/user_details?userid=njohnson", "average_stars": 3.5, "review_count": 12, "type": "user"}
{"votes": {"funny": 1, "useful": 0, "cool": 4}, "user_id": "david06", "name": "Jonathan George", "url": "https://example.com/user_details?userid=david06", "average_stars": 3.5, "review_count": 12, "type": "user"}
이런 경우에는 어떻게 처리할 수 있을까?
해결
데이터 구조가 유효하지 않아 한 번에 모든 데이터를 처리할 수는 없지만, 각 행의 데이터 구조는 유효하기 때문에 한 줄씩 읽어서 처리하면 된다.
import json
file_path = 'test.json'
json_data = []
with open(file_path, 'r') as f:
for line in f:
json_data.append(json.loads(line))
참고 문서
[python] 여러 JSON 개체가 있는 JSON 파일 로드 및 구문 분석