Python에서의 JSON 출력 정렬
Python의 JSON에 문제가 있습니다.
실제로 이 코드를 실행하려고 하면 python이 정렬된 JSON 문자열을 제공합니다!
예를 들어 다음과 같습니다.
values = {
'profile': 'testprofile',
'format': 'RSA_RC4_Sealed',
'enc_key': base64.b64encode(chiave_da_inviare),
'request': base64.b64encode(data)
}
values_json = json.dumps(values, sort_keys = False, separators = (',', ':'))
출력은 다음과 같습니다.
{
"profile": "testprofile",
"enc_key": "GBWo[...]NV6w==",
"request": "TFl[...]uYw==",
"format": "RSA_RC4_Sealed"
}
보시다시피 "sort_keys=False"를 사용하려고 했지만 변경되지 않았습니다.
Python이 JSON 문자열을 정렬하지 않도록 하려면 어떻게 해야 합니까?
표준 라이브러리에서 시도합니다.
>>> import json
>>> from collections import OrderedDict
>>> values = OrderedDict([('profile','testprofile'),
('format', 'RSA_RC4_Sealed'),
('enc_key', '...'),
('request', '...')])
>>> json.dumps(values, sort_keys=False)
'{"profile": "testprofile", "format": "RSA_RC4_Sealed", "enc_key": "...", "request": "..."}'
아쉽게도 이 기능은New in version 2.7
위해서collections
자신의 가치를 Python에 저장하고 있습니다.Python은 주문에 대한 개념이 전혀 없습니다.이것은 키와 값의 맵일 뿐입니다.따라서 아이템을 에 배치하면 모든 주문이 손실됩니다.values
변수.
사실 결정론적 순서를 얻는 유일한 방법은sort_keys=True
영숫자 순서로 정렬되어 있을 것입니다.순서가 왜 그렇게 중요하죠?
다른 곳에서 설명한 바와 같이 Ordered Dict를 사용하는 것이 대부분의 문제 해결 방법이며, Obj Dict를 사용하는 것이 더 나을 수 있습니다.
그러나 로드 시 순서를 유지해야 할 경우 값을 OrderedDict에 로드하기 위해 json.loads()도 필요합니다.이 사용 방법
from collections import OrderedDict
values=json.loads(jsontext,object_pairs_hook=OrderedDict)
그렇지 않으면 json 파일이 정렬되어 있어도 해당 순서는 로드 시 손실됩니다.
OrderedDict 대신 'ObjDict'를 사용하는 것이 더 나은 해결책일 수 있습니다.이를 위해서는 pip install objdict가 필요합니다.ObjDict는 OrderedDict와 마찬가지로 순서를 유지하지만 JSON 지원 및 이 예제의 보다 나은 처리를 제공합니다.
from objdict import ObjDict
values = ObjDict("""{"profile" : "testprofile",
"format": "RSA_RC4_Sealed" }""")
values.enc_key = base64.b64encode(chiave_da_inviare)
values.request = base64.b64encode(data)
values_json = values.dumps(separators=(',', ':'))
지정한 경우sort_keys=False
그러면 Python은 기본 Python dict 객체에 나타나는 순서대로 항목을 인쇄합니다.경우에 따라서는, 디폴트의 영숫자 정렬 순서와 같은 경우가 있습니다.이 예에서는 "format"이 "request" 뒤에 오기 때문에 키가 이렇게 정렬되지도 않습니다.그럼에도 불구하고sort_keys
다음 샘플 코드에서 알 수 있듯이 파라미터는 여전히 유효합니다.
>>> import json
>>> json.dumps({"a":5, "b":6, "c":7}, sort_keys=False)
'{"a": 5, "c": 7, "b": 6}'
키가 정렬되지 않았습니다: "profile", "enc_key", "request", "format".
사전에서 작성한 순서와 같은 순서로 표시되도록 하는 것처럼 들리지만 사전은 기본적으로 정렬되어 있지 않기 때문에 키를 삽입한 순서를 기억하지 못합니다.
사용할 수 있는 SortedDict 실장은 여러 가지가 있지만, json 인코더에서는 원하는 순서대로 키를 얻기 위해 사용할 수 없습니다.
단순 json.dumps를 사용하여 json 데이터를 정렬할 수 있습니다.
sorted_json = json.dumps(values, sort_keys=True)
정렬할 필요가 없는 경우는, 다음의 정보를 제공합니다.
unsorted_json = json.dumps(values)
또는 다음과 같이 입력합니다.
unsorted_json = json.dumps(values, sort_keys=False)
언급URL : https://stackoverflow.com/questions/2774361/json-output-sorting-in-python
'programing' 카테고리의 다른 글
React의 'scryRenderedDOM 컴포넌트'는 어디에 있습니까?WithClass의 메서드 이름은 어디서 왔습니까? (0) | 2023.03.02 |
---|---|
JSON RPC - "id"는 무엇을 의미합니까? (0) | 2023.03.02 |
리액트: DOM 리액트를 얼마나 조작할 수 있습니까? (0) | 2023.03.02 |
Ajax 제출 전 HTML5 유효성 검사 (0) | 2023.03.02 |
ng-mouse를 angularjs에 있는 마우스를 사용하여 항목을 전환합니다. (0) | 2023.03.02 |