JSON은 JavaScript Object Notation의 약자입니다. 가벼운 데이터 교환 형식입니다. 피클과 비슷합니다. 그러나 피클 직렬화는 Python에만 해당하는 반면 JSON 형식은 많은 언어로 구현됩니다. Python 표준 라이브러리의 json 모듈은 피클 및 마샬 모듈과 유사한 객체 직렬화 기능을 구현합니다.
pickle 모듈과 마찬가지로 json 모듈은 Python 객체를 JSON으로 인코딩된 문자열로 직렬화하기 위한 dumps() 및 load() 함수도 제공하고, dump() 및 load() 함수는 직렬화된 Python 객체를 파일에 쓰고 읽습니다.
덤프()
이 함수는 객체를 JSON 형식으로 변환합니다.
로드()
이 함수는 JSON 문자열을 다시 Python 객체로 변환합니다.
다음 예제는 이러한 기능의 기본 사용법을 보여줍니다.
>>> import json >>> data=['Rakesh',{'marks':(50,60,70)}] >>> s=json.dumps(data) >>> s '["Rakesh", {"marks": [50, 60, 70]}]' >>> json.loads(s) ['Rakesh', {'marks': [50, 60, 70]}]
dumps() 함수는 선택적 sort_keys 인수를 사용할 수 있습니다. 기본적으로 False입니다. True로 설정하면 사전 키가 JSON 문자열에서 정렬된 순서로 나타납니다.
>>> data={"marks":50, "age":20, "rank":5} >>> s=json.dumps(data, sort_keys=True) >>> s '{"age": 20, "marks": 50, "rank": 5}' >>> json.loads(s) {'age': 20, 'marks': 50, 'rank': 5}
dumps() 함수에는 값으로 숫자를 취하는 indent라는 또 다른 선택적 매개변수가 있습니다. pprint 출력과 유사하게 json 문자열의 형식화된 표현의 각 세그먼트 길이를 결정합니다.
>>> data = ['Rakesh',{'marks':(50,60,70)}] >>> s = json.dumps(data, indent=2) >>> print (s) [ "Rakesh",{ "marks": [ 50, 60, 70 ] } ]
json 모듈에는 위의 기능에 해당하는 객체 지향 API도 있습니다. 모듈에는 JSONEncoder 및 JSONDecoder라는 두 가지 클래스가 정의되어 있습니다.
JSONEncoder 클래스
이 클래스의 객체는 Python 데이터 구조용 인코더입니다. 각 Python 데이터 유형은 다음 표와 같이 해당 JSON 유형으로 변환됩니다.
파이썬 | JSON |
---|---|
딕셔너리 | 객체 |
목록, 튜플 | 배열 |
문자열 | 문자열 |
int, float, int 및 float 파생 열거형 | 숫자 |
참 | 참 |
거짓 | 거짓 |
없음 | 널 |
JSONEncoder 클래스는 JSONEncoder() 생성자에 의해 인스턴스화됩니다. 인코더 클래스에는 다음과 같은 중요한 메소드가 정의되어 있습니다.
-
인코딩() - Python 객체를 JSON 형식으로 직렬화
-
iterencode() − 객체를 인코딩하고 객체에 있는 각 항목의 인코딩된 형식을 생성하는 반복자를 반환합니다.
-
들여쓰기 - 인코딩된 문자열의 들여쓰기 수준을 결정합니다.
-
정렬 키 - 키가 정렬된 순서로 나타나도록 하려면 true 또는 false입니다.
-
Check_circular - True인 경우 컨테이너 유형 개체에서 순환 참조를 확인합니다.
다음 예제는 Python 목록 개체를 인코딩합니다.
>>> e=json.JSONEncoder() >>> e.encode(data) '["Rakesh", {"marks": [50, 60, 70]}]'
iterencode() 메서드를 사용하면 인코딩된 문자열의 각 부분이 아래와 같이 표시됩니다.
>>> for obj in e.iterencode(data): print (obj) [ "Rakesh" { "marks" : [ 50 , 60 , 70 ] } ]
JSONDEcoder 클래스
이 클래스의 객체는 json 문자열에서 다시 Python 데이터 truture로 디코딩하는 데 도움이 됩니다. 이 클래스의 주요 메서드는 decode()입니다. 다음 예제 코드는 이전 단계의 인코딩된 문자열에서 Python 목록 개체를 검색합니다.
>>> d=json.JSONDecoder() >>> d.decode(s) ['Rakesh', {'marks': [50, 60, 70]}]
파일/스트림이 있는 JSON
json 모듈은 디스크 파일 또는 바이트 스트림일 수 있는 객체와 같은 파일에 JSON 데이터를 쓰고 데이터를 다시 읽어오는 load() 및 dump() 함수를 정의합니다.
덤프()
이 함수는 Python 객체 데이터를 JSON 형식으로 인코딩하고 파일에 씁니다. 파일에 쓰기 권한이 있어야 합니다.
>>> data=['Rakesh', {'marks': (50, 60, 70)}] >>> fp=open('json.txt','w') >>> json.dump(data,fp) >>> fp.close()
이 코드는 현재 디렉토리에 'json.txt'를 생성합니다. 다음과 같이 내용을 보여줍니다.
["Rakesh", {"marks": [50, 60, 70]}]
로드()
이 함수는 파일에서 JSON 데이터를 로드하고 여기에서 Python 객체를 생성합니다. 파일은 읽기 권한으로 열어야 합니다.
>>> fp=open('json.txt','r') >>> ret=json.load(fp) >>> ret ['Rakesh', {'marks': [50, 60, 70]}] >>> fp.close()
이 기사에서는 json 모듈의 중요한 기능을 다룹니다.