Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python JSONDecodeError 설명 및 솔루션

많은 개발자가 프로그램의 데이터를 JSON 파일에 저장합니다. 다른 프로그램은 JSON 작업이 필요한 API를 참조합니다. 실제로 JSON 또는 이에 상응하는 Python 사전의 사용 사례를 찾는 데 어려움이 없을 것입니다.

JSON 데이터로 작업할 때 JSONDecodeError가 발생할 수 있습니다. 이 가이드에서는 JSONDecodeError의 원인과 이 오류를 수정하는 방법에 대해 이야기할 것입니다.

파이썬 JSONDecodeError

Python JSONDecodeError는 JSON 데이터 형식에 문제가 있음을 나타냅니다. 예를 들어 JSON 데이터에 중괄호가 없거나 값이 없는 키가 있거나 다른 구문이 누락되었을 수 있습니다.

JSONDecodeError를 완전히 수정하려면 JSON 파일로 이동하여 문제가 무엇인지 확인해야 합니다. 앞으로 여러 문제가 발생할 것으로 예상되는 경우 JSONDecodeError를 처리하기 위해 try…except 블록을 사용할 수 있습니다.

JSONDecodeError 키워드 다음에 오류의 원인을 설명하는 짧은 설명이 표시되어야 합니다.

올바른 형식의 모든 JSON은 다음과 같아야 합니다.

{
	"key": "value"
}

"값"은 목록, 문자열 또는 다른 JSON 개체와 같은 유효한 JSON 값일 수 있습니다.

예시 시나리오

우리는 어떤 컴퓨터가 회사 직원에게 발급되었는지 나타내는 JSON 개체 목록을 저장하는 프로그램을 구축 중입니다. 각 JSON 개체는 다음과 같아야 합니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

[
	{
		"name": "Employee Name",
		"equip_id": "000"
	}
]

우리는 이러한 JSON 객체를 equipment.json이라는 파일에 저장합니다. 파일에는 다음 항목이 하나만 포함되어 있습니다.

[
	{
		"name": "Laura Harper",
		"equip_id" "309"
	}
]

이 데이터를 프로그램으로 읽으려면 json 모듈을 사용할 수 있습니다.

import json

with open("equipment.json") as file:
	data = json.load(file)

print("Equipment data has been successfully retrieved.")

먼저 JSON 파일을 읽는 데 사용하는 json 모듈을 가져옵니다. 그런 다음 open()을 사용합니다. JSON 파일의 내용을 읽는 문. with 문이 실행되면 장비 데이터가 검색되었다는 메시지를 콘솔에 출력합니다.

코드를 실행하고 어떤 일이 일어나는지 봅시다:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/usr/lib/python3.8/json/__init__.py", line 293, in load
	return loads(fp.read(),
  File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
	return _default_decoder.decode(s)
  File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
	obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
	obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ':' delimiter: line 4 column 16 (char 47

코드가 긴 오류를 반환합니다. Python이 JSONDecodeError라는 용어 뒤에 오류의 원인을 설명하는 것을 볼 수 있습니다.

해결책

JSONDecodeError는 JSON 데이터에 콜론(:)이 누락되었음을 알려줍니다. 이 콜론은 16열의 4행에 나타나야 합니다. equipment.json 파일에서 이 데이터 행을 보면 JSON이 유효하지 않음을 알 수 있습니다.

"equip_id" "309",

코드에 콜론이 없습니다. 이 오류를 수정하려면 콜론을 추가해야 합니다.

"equip_id": "309",

이제 데이터가 표현되는 방식의 문제를 해결했으므로 프로그램을 다시 실행할 수 있습니다.

Equipment data has been successfully retrieved.

코드가 성공적으로 실행됩니다.

또는 try...except 핸들러를 사용하여 이 문제를 처리할 수 있으므로 다른 형식 문제에 직면했을 때 코드가 즉시 오류를 반환하지 않도록 할 수 있습니다.

import json

try:
	with open("equipment.json") as file:
		data = json.load(file)

	print("Equipment data has been successfully retrieved.")
except json.decoder.JSONDecodeError:
	print("There was a problem accessing the equipment data.")

JSON 데이터에 오류가 있는 경우 이 프로그램은 다음을 반환합니다.

There was a problem accessing the equipment data.

그렇지 않으면 프로그램이 데이터를 읽고 콘솔에 다음 텍스트를 표시합니다.

Equipment data has been successfully retrieved.

결론

Python JSONDecodeError는 JSON 객체 형식에 문제가 있음을 나타냅니다. 이 오류를 수정하려면 오류 메시지를 읽고 이를 사용하여 JSON 데이터를 수정해야 합니다. 또는 try...except 블록을 사용하여 오류를 포착하고 처리할 수 있습니다.

Python 코딩에 대해 더 알고 싶으십니까? Python 학습 방법 가이드를 읽어보세요. Python 학습 방법에 대한 전문가의 조언과 지식 구축에 도움이 되는 학습 리소스 목록을 찾을 수 있습니다.