상세 컨텐츠

본문 제목

[Python] JSON 다루기 기초

IT/Simple-Task

by HarimKang 2020. 5. 22. 17:05

본문

Writer: Harim Kang

JSON

  • JavaScript Object Notation이라는 뜻의 JSON은 다양한 형태의 데이터를 key, value구조로 구조화된 객체에 넣어서 처리하는 데이터 구조화 규격입니다.

JSON 특징

  • UTF-8(유니코드) 문자열 인코딩만 허용합니다.
  • 한글이나 다른 언어를 키 문자열로 사용가능합니다.
  • 주석을 지원하지 않습니다. 주석을 지원하는 규격은 YAML 또는 XML이 있습니다.

JSON 구조

  • 중괄호({}, 객체, dict)로 시작합니다.
  • Key-Value 구조를 가지고 있습니다. 파이썬의 dictionary와 같다고 보면 될것 같습니다.
  • key는 큰 따옴표로 감싼 문자열만 사용하여야합니다.
  • value에는 정수, 실수, 문자열, Null, 객체 등등이 사용가능 합니다.
  • 문자열 이스케이프를 사용할 수 있습니다.
    • \t: 탭 추가
    • \n: 개행
    • ": 큰 따옴표 넣기
  • 직렬화(serialization): JSON 데이터를 클래스, 맵, 리스트 등의 객체로 변환해주는 기능
  • 역직렬화(deserialization): 직렬화의 반대 기능

json 파일 읽기 & 접근

import json

def open_json_file(filename):
    with open(filename, encoding='UTF8') as file:
        try:
            # 파싱 성공시 데이터 리턴
            return json.load(file)
        except ValueError as e:
            print('파싱 실패! 에러 코드: {}'.format(e))
            # 파싱 성공시 None 리턴
            return None

if __name__ == "__main__":
    json_data = open_json_file('test1.json')

    if json_data:
        # 파싱 성공, 실패 여부 판별
        print(json.dumps(json_data, indent="\t"))
        print('내 학번: {}'.format(json_data['student number']))
        print('이름: {}'.format(json_data['name']))
        print('폰 번호: {}'.format(json_data['phone']['number']))
  • 파이썬에서는 json 라이브러리를 import하여 사용합니다. 이때, 예외 처리를 신경써서 하면 좋습니다.
  • indent = '\t' 파라미터를 주어서 json 라이브러리의 dump를 사용하면 아래의 출력과 같이 json 형태의 들여쓰기가 된 형태로 출력할 수 있습니다.
  • 위의 예제와 같이 json 파일의 데이터를 json_data에 가져오고, ['key']를 사용하여 value에 접근할 수 있습니다.

JSON을 읽을 때 주의 할 점

  • 버그, 잘못된 요청 등의 이유로 키가 존재하지 않거나 잘못된 값이 나오는 경우에는 예외가 발생합니다.
  • 이때, try-catch문(파이썬은 try-except문)으로 예외 발생을 제어해야 합니다.
  • 또는, if문으로 키를 검사하는 방법이 있습니다.
  • JSON 데이터를 읽어올 때에, 오름차순과 같은 순서가 있다고 생각하면 안됩니다. 언어마다 다르기 때문입니다.

JSON 파일 쓰기

def write_json_file(filename, content):
    with open(filename, 'w', encoding='UTF8') as file:
        # ensure_ascii는 아스키 문자를 제외하고 모든 문자열을 \u로 표기
        # indent는 들여쓰기 추가
        json.dump(content, file, ensure_ascii=False, indent=2)

if __name__ == "__main__":

    test2 = {
        u'num': 12345,
        u'str': '강하림',
        u'phone': '010'
    }

    write_json_file('test2.json', test2)
  • 위의 코드와 같은 예제로 json 파일을 생성할 수 있습니다.

JSON을 만들 때 주의 할 점

  • 항상 Null 값을 주의하는 것이 좋습니다. Null은 어떤 형태의 데이터가 원래 담기는지 알 수 없기 때문에 사용하지 않는 것이 좋습니다.
  • Null 대신 아래와 같이 사용하는 것이 좋습니다.
    • "숫자": 0
    • "문자열": ""
    • "객체": {}
    • "배열": []

JSON 키 이름 형식

  • PHP, 파이썬: snake_case
  • 자바, JS: camelCase

JSON의 장단점

JSON 장점

  1. 텍스트 기반 데이터 규격으로, 가독성이 좋습니다.
  2. 많이 사용되는 보편적인 규격입니다.
  3. 다양한 언어에서 라이브러리를 제공하여 사용성도 좋습니다.

JSON 단점

  1. 트래픽 오버헤드
    • 바이너리 기반의 프로토콜과 비교하여 데이터 크기가 큽니다. 압축과 같은 방법도 있지만, CPU 자원이 필요합니다.
    • 서버의 경우 많은 데이터가 오고 가므로 부하 테스트를 필요로 합니다.
  2. 어려운 유지보수
    • JSON 파일이 업데이트되면 그 파일을 사용하는 모든 프로그램도 규격을 통일시켜야합니다.
    • 통일이 안되면, 서로 다른 규격의 파일을 사용하여 문제가 발생할 수 있습니다.
    • "version": 1 과 같은 데이터를 추가하여 사용하여 버전 확인을 해주어야 합니다.
  3. 주석 불가
    • 앞서 말한 것처럼 주석을 사용할 수 없기에 필요하다면 YAML과 같은 규격을 선택해야 합니다.

Reference

  • 이기곤님의 '학교에서 알려주지 않는 17가지 실무 개발 기술'을 참고하여 정리 및 작성 하였습니다.
  • 실습 코드는 제 방식대로 변경하였습니다.

'IT > Simple-Task' 카테고리의 다른 글

[Python] 데이터 csv 저장  (0) 2020.06.16
Docker 설치 및 사용법  (1) 2019.12.31

관련글 더보기

댓글 영역