파이썬 - JSON: 파이썬에서 JSON 처리를 위한 초보자 가이드

안녕하세요, 미래의 파이썬 마에스토들! 오늘은 파이썬에서 JSON의 세계로 흥미진진한 여정을 떠나보겠습니다. 프로그래밍에 새로운 사람이라도 걱정하지 마세요 – 저는 친절한 가이드가 될 테니, 단계별로 알아갈 거예요. 이 튜토리얼을 끝내면 JSON을 전문가처럼 다룰 수 있을 거예요!

Python - JSON

파이썬에서 JSON

JSON이란?

JSON, JavaScript Object Notation은 가볍게 데이터 교환 형식입니다. 이를 데이터를 저장하고 운반하는 방법으로 생각해보세요 – 서로 다른 프로그램이 이해할 수 있는 유일한 언어라고 보면 됩니다. 인간이 읽을 수 있기 때문에(우리에게는 큰 장점입니다!) 그리고 기계가 분석하고 생성하기 쉽습니다.

프로그래밍 세계에서 JSON은 모두가 함께 있고 싶은酷한 아이처럼 존재합니다. 웹 API부터 구성 파일까지 모든 곳에서 사용됩니다. 이러한 이유로 파이썬에서 JSON을 다루는 것은 중요한 기술입니다!

왜 파이썬에서 JSON을 사용하나요?

파이썬과 JSON은 피넛버터와 젤리처럼 잘 맞는 것입니다 – 서로 잘 동작합니다! 파이썬은 json 모듈을 통해 JSON에 내장된 지원을 제공합니다. 이는 파이썬 객체를 JSON으로 쉽게 변환하고, 그 반대로 변환할 수 있음을 의미합니다.

JSON 모듈을 임포트하고 시작해보겠습니다:

import json

간단하죠? 이제 흥미로운 내용에 빠지러 가요!

JSON 직렬화

직렬화는 파이썬 객체를 JSON 문자열로 변환하는 복잡한 단어입니다. 파이썬을 다른 프로그램이 이해할 수 있는 언어로 번역하는 것과 같습니다.

기본 직렬화

단순한 파이썬 딕셔너리부터 시작해보겠습니다:

my_dict = {
"name": "Alice",
"age": 30,
"city": "Wonderland"
}

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

출력:

{"name": "Alice", "age": 30, "city": "Wonderland"}

여기서 json.dumps()는 우리의 파이썬 딕셔너리를 JSON 문자열로 변환합니다. 마법처럼, 하지만 실제로는 코드입니다!

예쁜 인쇄

때로는 우리의 JSON이 예쁘고 읽기 쉬운 형태로 보이고 싶습니다. 이를 위해 예쁜 인쇄가 필요합니다:

pretty_json = json.dumps(my_dict, indent=4)
print(pretty_json)

출력:

{
"name": "Alice",
"age": 30,
"city": "Wonderland"
}

indent=4 매개변수는 파이썬에 4개의 공백을 들여쓰기하여 우리의 JSON이 깔끔하고 티드리게 만듭니다.

JSON을 파일에 쓰기

غالبemente는 우리의 JSON 데이터를 파일에 저장하고 싶습니다. 이렇게 하면 됩니다:

with open('data.json', 'w') as file:
json.dump(my_dict, file, indent=4)

이렇게 하면 data.json라는 파일을 생성하고 예쁜 인쇄된 JSON을 씁니다. 데이터를 저장하는 텍스트 메시지와 같아요!

JSON 역직렬화

역직렬화는 거꾸로 변환하는 과정입니다 – JSON 문자열을 다시 파이썬 객체로 변환하는 것입니다. 유일한 언어를 다시 파이썬으로 번역하는 것과 같습니다.

기본 역직렬화

JSON 문자열부터 시작해보겠습니다:

json_string = '{"name": "Bob", "age": 25, "city": "Neverland"}'

python_dict = json.loads(json_string)
print(python_dict)
print(type(python_dict))

출력:

{'name': 'Bob', 'age': 25, 'city': 'Neverland'}
<class 'dict'>

json.loads()는 우리의 JSON 문자열을 다시 파이썬 딕셔너리로 변환합니다. 마법처럼 거꾸로 만들어요!

파일에서 JSON을 읽기

이전에 만든 파일을 다시 읽어보겠습니다:

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

print(loaded_data)

이렇게 하면 파일의 JSON 데이터를 읽고 다시 파이썬 객체로 변환합니다. 저장된 텍스트 메시지를 열고 읽는 것과 같아요!

고급 JSON 처리

기본기를 다지고 봤으니, 더 고급 기술에 대해 살펴보겠습니다.

복잡한 데이터 타입 처리

JSON은 훌륭하지만, 기본적으로 몇 가지 데이터 타입만 이해합니다. 여기서는 파이썬 타입이 JSON 타입으로 어떻게 매핑되는지의 표를 보겠습니다:

파이썬 타입 JSON 타입
dict object
list, tuple array
str string
int, float number
True true
False false
None null

그러나 datetime 객체 같은 더 복잡한 타입은 어떻게 해야 하나요? 이를 위해 커스텀 인코딩을 사용하면 됩니다!

JSONEncoder 클래스

JSONEncoder 클래스는 우리가 JSON이 기본적으로 지원하지 않는 파이썬 객체에 대해 커스텀 인코딩을 정의할 수 있게 합니다.

datetime 객체의 예를 들어보겠습니다:

from datetime import datetime

class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)

data = {
"name": "Charlie",
"birthday": datetime(1990, 5, 15)
}

json_string = json.dumps(data, cls=DateTimeEncoder)
print(json_string)

출력:

{"name": "Charlie", "birthday": "1990-05-15T00:00:00"}

우리의 커스텀 인코더는 datetime 객체를 ISO 형식 문자열로 변환하여 JSON가 처리할 수 있게 합니다.

JSONDecoder 클래스

마찬가지로, JSONDecoder 클래스는 JSON이 다시 파이썬 객체로 디코딩되는 방식을 사용자 정의할 수 있게 합니다.

ISO 형식 문자열을 다시 datetime 객체로 변환하는 예를 보겠습니다:

import dateutil.parser

class DateTimeDecoder(json.JSONDecoder):
def __init__(self, *args, **kwargs):
json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)

def object_hook(self, obj):
for key, value in obj.items():
if isinstance(value, str):
try:
obj[key] = dateutil.parser.parse(value)
except ValueError:
pass
return obj

json_string = '{"name": "Charlie", "birthday": "1990-05-15T00:00:00"}'
decoded_data = json.loads(json_string, cls=DateTimeDecoder)
print(decoded_data)
print(type(decoded_data['birthday']))

출력:

{'name': 'Charlie', 'birthday': datetime.datetime(1990, 5, 15, 0, 0)}
<class 'datetime.datetime'>

우리의 커스텀 디코더는 ISO 형식 문자열을 인식하고 다시 datetime 객체로 변환합니다.

그리고 이렇게 끝납니다, 여러분! 파이썬에서 JSON의 세계를 거쳐 기본적인 직렬화와 역직렬화부터 고급적인 커스텀 인코더와 디코더까지 여정을 했습니다. 기억하세요, 연습이 실력을 만든다는 말이 있으니, 이 개념들을 실험해보세요.

JSON은 파이썬에서 작은 부분일지라도, 오늘날의 데이터 기반 세상에서 중요한 기술입니다. 웹 애플리케이션을 만들거나 API를 사용하거나 데이터를 분석할 때도, 새로운 JSON 기술이 큰 도움이 될 것입니다.

코딩을 계속하고, 계속 배우며, 가장 중요한 것은 파이썬을 즐기는 것입니다.

Credits: Image by storyset