Python에서 JSON 파일을 읽고 구문 분석하는 방법

내장된 json 모듈을 사용하여 Python에서 JSON 파일을 읽고, 구문 분석하고, 로드하는 방법을 알아보세요. JSON 문자열을 사전으로 또는 그 반대로 변환하는 방법을 마스터하세요.

Editor에서 이 솔루션을 사용해 보세요.

개요

JSON(JavaScript Object Notation)은 API, 구성 파일 및 데이터 저장에 가장 널리 사용되는 데이터 형식입니다. Python에는 JSON 데이터를 매우 간단하게 읽고, 구문 분석하고, 쓸 수 있게 해주는 'json' 모듈이 내장되어 있습니다. JSON 개체는 Python 사전에 완벽하게 매핑되고 JSON 배열은 Python 목록에 매핑되므로 JSON 작업은 네이티브처럼 느껴집니다.

외부 파일에서 JSON을 읽으려면 파일 스트림을 구문 분석하고 JSON 구조를 Python 데이터 유형으로 변환하는 `json.load()` 함수를 사용합니다. JSON 데이터가 이미 문자열로 메모리에 로드된 경우 대신 `json.loads()` 함수('s'는 문자열을 나타냄)를 사용합니다. 올바른 함수를 선택하면 파서 충돌이 방지됩니다.

JSON으로 작업할 때는 인코딩 및 잠재적인 형식 오류를 처리하는 것이 가장 좋습니다. `open()` 문 내에서 `encoding="utf-8"`을 사용하면 스크립트가 특수 문자로 인해 실패하는 것을 방지할 수 있습니다. `json.JSONDecodeError`를 포착하는 `try-Exception` 블록에서 파일 작업을 래핑하면 JSON 파일 형식이 잘못된 경우 앱의 성능이 정상적으로 저하됩니다.

코드 및 실행 출력

이 코드는 샘플 JSON 파일을 작성하고, 이를 읽고 Python 사전으로 다시 구문 분석하고, JSON 문자열을 처리하는 방법을 보여줍니다.

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
터미널 출력
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

단계별 구현

  • 스크립트에 내장된 json 모듈을 가져옵니다.
  • open("filename.json", "r", 인코딩="utf-8")을 파일로 사용하여 JSON 파일을 엽니다.
  • 파일 객체를 json.load(file)에 전달하여 내용을 Python 사전으로 구문 분석합니다.
  • 메모리에 이미 로드된 원시 JSON 문자열을 구문 분석해야 하는 경우 json.loads(string_data)를 사용하세요.

자주 묻는 질문

json.load()와 json.loads()의 차이점은 무엇입니까?

json.load()는 파일과 유사한 스트림 객체(디스크에서 읽기)를 허용하는 반면, json.loads()는 JSON 콘텐츠(메모리에서 읽기)가 포함된 표준 문자열 또는 바이트 객체를 허용합니다.

사용자 정의 클래스에 대한 JSON 직렬화 오류를 어떻게 처리합니까?

Python의 json 모듈은 기본적으로 사용자 정의 클래스 인스턴스를 직렬화할 수 없습니다. json.JSONEncoder를 확장하는 사용자 정의 인코더 클래스를 제공하거나 먼저 도우미 메서드를 사용하여 인스턴스의 속성을 사전으로 추출해야 합니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.