Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 JSON 인코더 및 디코더 패키지

<시간/>

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