본문 바로가기
Python/파이썬 문법

(Python) JSON 모듈이란?

by 미니몬 2024. 1. 11.

목차

    728x90
    반응형

    Summary

    오늘은 Python 에서 사용되는 json 모듈에 대해서 소개해보겠습니다.

    json 모듈은 JSON (JavaScript Object Notation) 데이터를 다루기 위한 표준 라이브러리입니다. JSON은 경량의 데이터 교환 포맷으로, 사람이 읽기 쉽고 기계가 파싱하고 생성하기 쉽게 설계되었습니다. 이 모듈은 Python 객체와 JSON 문자열 간의 변환을 지원합니다. 아래에서는 json 모듈의 주요 기능과 사용법에 대해 자세히 설명하겠습니다.

     

     

    1) 유래

    JSON (JavaScript Object Notation)은 원래 웹 언어인 JavaScript에서 데이터 객체를 만들기 위해 개발되었습니다. 2000년대 초반, 웹 개발이 복잡해지면서 데이터 교환 방식으로 XML 대신 JSON이 인기를 끌기 시작했어요. 그 이유는 JSON이 더 가볍고, 구조가 간단해서였죠.

     

     

    2) 데이터 형식

    • 구조: JSON은 키-값 쌍으로 구성된 구조를 가집니다. 예: {"name": "John", "age": 30}

    • 배열: JSON에서 배열은 대괄호 []로 표현됩니다. 예: {"pets": ["dog", "cat"]}

    • 중첩: JSON 객체는 중첩될 수 있어 복잡한 데이터 구조를 표현할 수 있습니다
      예: {"name": "John", "address": {"city": "New York", "zip": "10021"}}

    • 데이터 타입: JSON은 문자열, 숫자, 객체, 배열, 불리언(true/false), null 등 다양한 데이터 타입을 지원합니다.

     

     

    3) 왜 json 데이터를 사용하는 것인가?

    왜 JSON 데이터를 사용하는 것인가?

    • 경량성: JSON은 간결하고 가독성이 좋으며, 데이터를 전송하는 데 필요한 대역폭이 적습니다.

    • 언어 독립성: JSON은 대부분의 프로그래밍 언어에서 지원되므로, 언어에 구애받지 않고 사용할 수 있습니다.

    • 구조화된 데이터: JSON은 구조화된 데이터를 표현하기에 용이하여, 복잡한 데이터도 쉽게 표현하고 처리가능하다

    • 웹 호환성: 웹 애플리케이션에서 널리 사용되며, JavaScript와의 뛰어난 호환성을 가집니다.

     

     

    4) 데이터의 사용법

    Python에서 JSON 데이터를 전송하거나 수신할 때는 json 모듈을 사용합니다. 

    데이터를 전송할 때는 json.dumps() 함수를 사용해 Python 객체를 JSON 문자열로 변환합니다. 

    반대로 데이터를 수신할 때는 json.loads() 함수로 JSON 문자열을 Python 객체로 변환해요.

     

    • json.dumps(obj) : Python 객체를 JSON 문자열로 변환합니다. 
      obj는 딕셔너리, 리스트, 튜플, 문자열, 숫자, 불리언(True/False), None 등이 될 수 있습니다.
    data = {"name": "John", "age": 30, "city": "New York"}
    json_string = json.dumps(data)

     

    • json.loads(json_string) : JSON 형식의 문자열을 Python 객체로 변환합니다.
    json_string = '{"name": "John", "age": 30, "city": "New York"}'
    data = json.loads(json_string)

     

     

    5) 파일과의 인터렉션

    • json.dump(obj, file) : Python 객체를 JSON 문자열로 변환하여 파일에 저장합니다.
    • json.load(file) : 파일에 저장된 JSON 문자열을 Python 객체로 변환합니다.
    # 파일에 JSON 데이터 쓰기
    with open('data.json', 'w') as f:
      json.dump(data, f)
    
    # 파일에서 JSON 데이터 읽기
    with open('data.json', 'r') as f:
      data = json.load(f)

     

     

    6) 그 외 유의사항

    • 정렬과 들여쓰기 : json.dumps()는 sort_keys, indent와 같은 추가적인 인자를 제공하여 출력 포맷을 커스터마이즈 할 수 있습니다.
    json_string = json.dumps(data, indent=4, sort_keys=True)

     

    • 커스텀 인코딩/디코딩 : Python의 json 모듈은 커스텀 JSON 인코더 및 디코더를 정의할 수 있게 해줍니다.
      예를 들어, Python의 날짜/시간 객체를 JSON으로 변환하려면 커스텀 인코더를 사용해야 합니다.
    import json
    from datetime import datetime
    
    class CustomEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, datetime):
                # datetime 객체를 문자열로 변환
                return obj.isoformat()
            # 기본 인코더의 기능을 사용하여 다른 타입 처리
            return json.JSONEncoder.default(self, obj)
    
    # 사용 예시
    now = datetime.now()
    
    json_normal = {'time':now}
    json_data = json.dumps({'time': now}, cls=CustomEncoder)
    
    print(json_normal)
    print(json_data)

    위 코드를 실행하면 아래와 같은 출력값이 나오는데요.

     

    json_normal : {'time': datetime.datetime(2024, 1, 11, 13, 48, 3, 669412)}
    json_data : {"time": "2024-01-11T13:48:03.669412"}

     

    'json_normal'은 datetime 객체를 그대로 유지하면서 JSON으로 변환되고,

    'json_data'는 datetime 객체를 ISO 형식의 문자열로 변환하여 JSON으로 직렬화됩니다.

     

    • JSON 데이터는 문자열, 숫자, 배열(리스트), 객체(딕셔너리), 불리언(True/False), Null만을 지원합니다.
      Python의 튜플이나 날짜/시간 객체 등 JSON 표준에 없는 타입은 변환 시 주의가 필요합니다.

     

    이처럼 Python의 json 모듈은 간단하면서도 강력한 기능을 제공하여, 웹 개발, 데이터 분석, 설정 파일 처리 등 다양한 분야에서 널리 사용됩니다. 다양한 데이터 통신 방식이 있고 각각의 장단점이 있을 수 있습니다.

    그렇지만 아직까지는 JSON 데이터 형식은 널리 사용되고 있으니 데이터 전송 및 수신 역활에 적당한 도구입니다.

    728x90
    반응형