본문 바로가기
대동단결 Python

JSON으로 직렬화할 수 있는 Python 데이터 타입

by 즐거운 지니 2024. 7. 12.
반응형

Python에서 JSON (JavaScript Object Notation)은 데이터를 직렬화하고 역직렬화하는데 매우 유용한 형식입니다. Python의 json 모듈을 사용하여 다양한 데이터 구조를 JSON으로 변환(직렬화)하거나 JSON 문자열을 Python 객체로 변환(역직렬화)할 수 있습니다.

JSON으로 직렬화 및 역직렬화할 수 있는 Python 데이터 타입과 그 예시는 다음과 같습니다:

  1. 기본 데이터 타입:
    • 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"
  2. 리스트 및 튜플:
    • 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\"]"
  3. 딕셔너리:
    • 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}"
  4. 클래스 인스턴스 (객체):
    • 기본적으로 json 모듈은 사용자 정의 클래스 인스턴스를 JSON으로 직렬화할 수 없습니다. 이를 위해서는 클래스 인스턴스를 JSON으로 변환할 수 있는 방법을 정의해야 합니다. __dict__ 속성을 사용하거나 사용자 정의 인코더를 정의하여 이를 해결할 수 있습니다.
    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}"
    사용자 정의 디코더를 사용하여 JSON을 클래스 인스턴스로 변환할 수도 있습니다:
  5. 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 데이터 타입

  1. 셋 (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]"
  2. 바이트 (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으로 저장할 수 있습니다.

반응형

댓글