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 모듈의 중요한 기능을 다룹니다.