Python에서 JSON을 구문 분석하는 방법 - 쉬운 단계

댓글: 0

JSON은 JavaScript 객체 표기법의 약자입니다. 가벼울 뿐만 아니라 사람이 읽고 쓰기에도 쉽습니다. 마찬가지로 기계도 구문 분석과 생성이 간단합니다. 파이썬 개발자는 API, 구성 파일 또는 기타 저장된 정보 소스의 콘텐츠를 다룰 때 구문 분석이 매우 중요합니다. 이 문서에서는 콘텐츠 저장을 위해 json.dump python을 사용하는 방법을 포함하여 Python 모듈을 사용하여 JSON을 구문 분석하는 기본 사항을 안내합니다.

JSON과 그 구조에 대한 이해

JSON은 키-값 쌍으로 세부 정보를 구조화합니다. 다음은 객체의 기본 예시입니다:


{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

이 파이썬 json 구문 분석 예제에는 문자열, 숫자, 부울, 배열이 공통적으로 포함되어 있습니다. 이 구조에 익숙해지면 Python에서 훨씬 쉽게 작업할 수 있습니다.

Python에서 JSON과 상호 작용하기

파이썬에 내장된 모듈을 사용하여 json 문자열을 쉽게 파싱할 수 있습니다. 이 모듈에는 문자열에서 읽기 위한 json.loads(), 파일에서 읽기 위한 json.load() 등의 메서드가 포함되어 있습니다. 반대로 json.dumps() 및 json.dump Python은 각각 문자열과 파일에 정보를 쓰는 데 사용됩니다.

JSON 데이터 읽기

다음에 설명할 JSON 데이터를 읽는 방법에 대해 살펴보겠습니다.

문자열에서 JSON 읽기

파이썬에서 json을 읽으려면 json.loads()를 사용하여 문자열을 구문 분석하고 파이썬 객체로 변환합니다:


import json

json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)

print(data)

출력:

1.png

파일에서 JSON 추출하기

파일에서 정보를 추출하려면 다음 메서드인 json.load()를 사용하여 파이썬에서 json 파일을 엽니다:


import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

출력:

2.png

JSON 데이터 쓰기

글을 쓰기 전에 기존 정보를 읽거나 로드해야 하는 경우가 많은데, 이때 파이썬 load json 파일 메서드가 유용합니다. 정보가 제대로 로드되면 다양한 형식으로 조작하고 다시 쓸 수 있습니다.

문자열에 JSON 쓰기

문자열에 정보를 쓰려면 json.dumps Python 메서드를 사용합니다:


import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

json_string = json.dumps(data)
print(json_string)

출력:

3.png

파일에 JSON 쓰기

이 파일의 세부 정보를 작성하려면 json.dump Python 메서드를 사용합니다:


import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

with open('data.json', 'w') as file:
    json.dump(data, file)

고급 중첩 JSON 관리

중첩된 객체는 보다 복잡한 정보 구조로 작업할 때 흔히 발생하며, 이러한 중첩된 구조를 쉽게 처리할 수 있습니다.


import json

nested_json_string = '''
{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"],
    "address": {
        "street": "123 Main St",
        "city": "Wonderland"
    }
}
'''

data = json.loads(nested_json_string)
print(data['address']['city'])

출력:

4.png

사용자 지정 JSON 인코더

언어가 모든 사용자 정의 객체를 자동으로 JSON으로 변환할 수는 없습니다. 이러한 경우 사용자 정의 인코더를 만들어야 합니다.


import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

class StudentEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Student):
            return obj.__dict__
        return super().default(obj)

student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)

출력:

5.png

사용자 지정 JSON 디코더

사용자 정의 객체로 역직렬화하려면 이를 처리하는 방법을 알고 있는 사용자 정의 디코더를 구현해야 합니다.


import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

def student_decoder(dct):
    return Student(dct['name'], dct['age'], dct['is_student'])

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)

출력:

6.png

일반적인 문제 처리

데이터 세부 정보로 작업할 때, 특히 구조화된 콘텐츠를 구문 분석, 생성 또는 액세스할 때 몇 가지 일반적인 오류가 발생할 수 있습니다. 신뢰할 수 있는 Python json 파서를 사용하면 이러한 문제를 보다 효율적으로 식별하고 해결하는 데 도움이 됩니다. 다음은 가장 일반적인 몇 가지 오류입니다:

잘못된 JSON 형식

json 파일을 구문 분석할 때 흔히 발생하는 오류는 잘못된 형식입니다. 키와 문자열 값을 큰따옴표로 묶고 대괄호와 중괄호를 적절히 중첩해야 합니다.


import json

invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
    data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
    print(f"Invalid JSON format: {e}")

출력:

7.png

누락된 키 처리

콘텐츠에 예상한 모든 키가 포함되지 않는 경우가 있습니다. get() 메서드를 사용하면 오류를 발생시키는 대신 기본값을 반환하여 누락된 키를 안전하게 처리할 수 있습니다.


import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)

JSON 구문 분석 문제 디버깅

pdb 모듈을 사용하여 중단점을 설정하고 구문 분석 코드를 디버그하세요.


import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

웹 스크래핑에서 JSON 처리의 실제 예제

웹 스크래핑은 일반적으로 획득한 정보를 반환하는 서비스에서 콘텐츠를 검색하는 작업을 포함합니다. 다음은 엔드포인트 https://httpbin.org/anything 와 함께 요청 라이브러리를 활용하는 예제입니다.

시작하기 전에 요청 패키지를 설치했는지 확인하세요:


pip install requests

구조화된 콘텐츠로 작업할 때 요청 라이브러리를 사용하면 작업을 더 쉽게 수행할 수 있습니다. requests.get(url)을 통해 GET 요청과 URL을 발행하기만 하면 됩니다. 그런 다음 response.json()으로 응답을 파싱할 수 있습니다. 여기에서 헤더, 사용자 에이전트, 원본 또는 요청 URL과 같은 특정 정보에 간단히 액세스하여 필요에 따라 인쇄할 수 있습니다.

이 코드에는 강력한 오류 처리 기능이 포함되어 있어 디코딩 오류가 발생하면 json.JSONDecodeError를 캡처하고 특정 키가 없을 경우 KeyError를 캡처하여 '데이터 없음' 충돌로부터 프로그램을 안전하게 보호합니다. 따라서 이러한 코드 견고성 덕분에 실제 웹 스크래핑 작업을 완벽하게 처리할 수 있습니다.


import requests
import json

url = 'https://httpbin.org/anything'

response = requests.get(url)

try:
    data = response.json()

    # JSON 응답에서 특정 데이터 추출하기
    headers = data['headers']
    user_agent = headers.get('User-Agent', 'N/A')
    origin = data.get('origin', 'N/A')
    url = data.get('url', 'N/A')

    print(f"User Agent: {user_agent}")
    print(f"Origin: {origin}")
    print(f"URL: {url}")

except json.JSONDecodeError:
    print("Error decoding JSON response")

except KeyError as e:
    print(f"Key error: {e} not found in the JSON response")

8.png

모든 개발자는 파이썬에서 json 파일을 파싱하는 방법을 알아야 합니다. 이 설명서에서 강조하는 모듈과 가장 좋은 방법을 사용하면 충분히 빠르게 읽고, 쓰고, 디버깅할 수 있습니다. 즉, 코드를 정기적으로 테스트하고 올바른 도구와 최신 기능을 사용하여 더 나은 성능을 발휘할 수 있습니다. 이 가이드는 이러한 작업을 효율적으로 마스터하는 데 도움이 되도록 Python에서 json 데이터를 구문 분석하는 데 중점을 두고 있습니다.

웹 스크래핑을 할 때 웹 API의 콘텐츠는 종종 이러한 형식으로 제공되기 때문에 구문 분석은 필수적입니다. 이를 처리하고 조작하는 데 능숙하면 다양한 소스에서 가치 있는 정보를 효율적으로 추출할 수 있습니다.

결론

구문 분석은 웹 API, 구성 파일 또는 외부 소스로 작업하는 모든 개발자에게 핵심적인 기술입니다. 문자열, 파일에서 읽기, 구조화된 출력 작성, 중첩 및 사용자 정의 객체 처리 등 정보 처리는 Python에 내장된 모듈을 통해 간소화됩니다. 개발자는 json.load(), json.loads(), json.dump(), json.dumps() Python 메서드를 잠금 해제하고 일반적인 문제를 처리하는 방법을 배우고, 맞춤형 인코더 또는 디코더를 구현하고, 견고하고 신뢰할 수 있는 정보 상호 작용을 위한 맞춤형 애플리케이션을 만들 수 있습니다. 이 형식이 정보 교환을 위한 웹 표준이라는 점을 감안할 때 이러한 기술은 스크래핑, 콘텐츠 조작, API를 통한 여러 서비스 통합에 유용합니다. 간단한 파이썬 코드를 사용하여 json 파일을 읽으면 모든 프로젝트에서 파이썬으로 json 파일을 구문 분석할 수 있으며, json.dump 파이썬을 사용하면 자료를 효율적으로 다시 저장할 수 있습니다.

댓글:

0 댓글