Skip to content

2.20. 내용정리: 23일차

흔한 찐따 edited this page Apr 11, 2022 · 4 revisions

JSON (JavaScript Object Notation)

정의

  • JSON(JavaScript Object Notation)속성-값 쌍 또는 Key-Value 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.
  • 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다.
  • 특히, 인터넷에서 자료를 주고받을 때 그 자료를 표현하는 방법으로 알려져 있다.
  • 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수 값을 표현하는 데 적합하다.
  • 본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다.
  • 즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C , C++ , C# , JAVA , JavaScript , Perl , Python 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.

구조

  • 구조는 다음과 같이 Key-Value 쌍을 갖는 구조로 되어있다.
  • Key는 고유의 string , Valueobject , number, boolean(true, false) , string , array , null 이 올 수 있다.
{
    "name": "흔한 찐따",
    "age": 28,
    "blog": "찐따 격리소"
}

장점

  • JSON은 텍스트로 이루어져 있으므로, 사람과 기계 모두 읽고 쓰기 쉽다.
  • 프로그래밍 언어와 플랫폼에 독립적이므로, 서로 다른 시스템간에 객체를 교환하기에 좋다.
  • 이런 특성은 자바스크립트를 자주 사용하는 웹 환경에서 유리하다.

파이썬에서 JSON 다루기

  • 파이썬 표준 라이브러리 문서인 json 문서를 참고하면 된다.
  • import json 을 사용하여 JSON 라이브러리를 사용할 수 있다.
  • JSON 라이브러리를 사용하면, 파이썬 타입의 Object 를 JSON 문자열로 변경할 수 있다. (JSON 인코딩)
  • 또한 JSON 문자열을 다시 파이썬 타입으로 변환할 수 있다. (JSON 디코딩)

파이썬 데이터 구조를 위한 확장 가능한 JSON 인코더

기본적으로 다음 객체와 형을 지원한다.

파이썬 JSON
dict object
list , tuple array
str string
int , float , intfloat 에서 파생된 열거형 number
True true
False false
None null

예시

아래의 예시는 기본 파이썬 객체 계층 구조 인코딩의 예시이다.

import json


# 결과: '["\ud754\ud55c\ucc10\ub530", {"\ucc10\ub530": ["\uc548\ub155\ud558\uc138\uc694", null, 1.0, 2]}]'
a = json.dumps(['흔한찐따', {'찐따': ('안녕하세요', None, 1.0, 2)}])
print(a)

# 결과: "\"\ud754\ud55c\ucc10\ub530\\\ucc10\ub530"
print(json.dumps("\"흔한찐따\찐따"))

# 결과: "\u1234"
print(json.dumps('\u1234'))

# 결과: "\\"
print(json.dumps('\\'))

# 결과: {"a": 0, "b": 0, "c": 0}
print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))

저장된 json 파일을 불러온 다음, 파이썬의 dict 타입으로 바꾸려면 다음과 같이 json.load() 함수를 통해 불러올 수 있다.

with open('test.json', 'w', encoding='utf8') as file:
    file.write(a)

# 'test.json' 불러오기
with open('test.json') as file:
    data = json.load(file)
    # 결과: ['흔한찐따', {'찐따': ['안녕하세요', None, 1.0, 2]}]
    print(data)