반응형
Python에서 JSON (JavaScript Object Notation)은 데이터를 직렬화하고 역직렬화하는데 매우 유용한 형식입니다. Python의 json
모듈을 사용하여 다양한 데이터 구조를 JSON으로 변환(직렬화)하거나 JSON 문자열을 Python 객체로 변환(역직렬화)할 수 있습니다.
JSON으로 직렬화 및 역직렬화할 수 있는 Python 데이터 타입과 그 예시는 다음과 같습니다:
- 기본 데이터 타입:
int
,float
,str
,bool
,None
import json number = 42 text = "Hello, world!" boolean = True none_value = None json_number = json.dumps(number) json_text = json.dumps(text) json_boolean = json.dumps(boolean) json_none_value = json.dumps(none_value) print(json_number) # "42" print(json_text) # "\"Hello, world!\"" print(json_boolean) # "true" print(json_none_value) # "null"
- 리스트 및 튜플:
- JSON 배열로 변환됩니다.
import json data_list = [1, 2, 3, "a", "b", "c"] json_data_list = json.dumps(data_list) print(json_data_list) # "[1, 2, 3, \"a\", \"b\", \"c\"]"
- 딕셔너리:
- JSON 객체로 변환됩니다.
import json data_dict = { "name": "Alice", "age": 30, "is_student": False } json_data_dict = json.dumps(data_dict) print(json_data_dict) # "{\"name\": \"Alice\", \"age\": 30, \"is_student\": false}"
- 클래스 인스턴스 (객체):
- 기본적으로
json
모듈은 사용자 정의 클래스 인스턴스를 JSON으로 직렬화할 수 없습니다. 이를 위해서는 클래스 인스턴스를 JSON으로 변환할 수 있는 방법을 정의해야 합니다.__dict__
속성을 사용하거나 사용자 정의 인코더를 정의하여 이를 해결할 수 있습니다.
사용자 정의 디코더를 사용하여 JSON을 클래스 인스턴스로 변환할 수도 있습니다:import json class Person: def __init__(self, name, age): self.name = name self.age = age def person_to_dict(person): return { "name": person.name, "age": person.age } person = Person("Alice", 30) json_person = json.dumps(person, default=person_to_dict) print(json_person) # "{\"name\": \"Alice\", \"age\": 30}"
- 기본적으로
def dict_to_person(d): return Person(d['name'], d['age']) json_person_str = '{"name": "Alice", "age": 30}' person_instance = json.loads(json_person_str, object_hook=dict_to_person) print(person_instance.name) # "Alice" print(person_instance.age) # 30
JSON으로 직렬화할 수 없는 Python 데이터 타입
- 셋 (set):
set
은 JSON으로 직접 직렬화할 수 없습니다.list
로 변환 후 직렬화해야 합니다.
import json data_set = {1, 2, 3} json_data_set = json.dumps(list(data_set)) print(json_data_set) # "[1, 2, 3]"
- 바이트 (bytes):
bytes
는 JSON으로 직접 직렬화할 수 없습니다. 문자열로 변환 후 직렬화해야 합니다.
import json data_bytes = b"hello" json_data_bytes = json.dumps(data_bytes.decode('utf-8')) print(json_data_bytes) # "\"hello\""
요약
Python의 json
모듈을 사용하여 기본 데이터 타입(int, float, str, bool, None), 리스트, 튜플, 딕셔너리 등의 데이터를 JSON 형식으로 직렬화하고 역직렬화할 수 있습니다. 사용자 정의 클래스 인스턴스는 직렬화하기 위해 default
인수를 사용하여 객체를 JSON 호환 형식으로 변환하는 방법을 제공해야 합니다. 직렬화할 수 없는 데이터 타입은 적절한 형식으로 변환하여 JSON으로 저장할 수 있습니다.
반응형
'대동단결 Python' 카테고리의 다른 글
통신을 위한 바이트 편집에 관한 python (0) | 2024.09.03 |
---|---|
파이썬을 위한 비동기 멀티테스킹 asyncio 사용하기 (0) | 2024.07.19 |
모듈 일괄 설치 (1) | 2023.12.19 |
라즈베리파이 파이썬 업그레이드 (0) | 2023.07.27 |
파이썬의 데코레이션 이란? (0) | 2023.02.04 |
댓글