Python에서 JSON 출력 정렬
파이썬에서 JSON에 문제가 있습니다.
실제로이 코드를 실행하려고하면 파이썬이 정렬 된 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 문자열 정렬을 중지하려면 어떻게해야합니까?
당신은 순서에 대한 내재적 개념이 전혀없는 python dict에 값을 저장하고 있습니다 . 그것은 단지 키 => 값 맵일뿐입니다. 따라서 항목을 "값"변수에 배치하면 항목이 모든 순서를 잃게됩니다.
사실 결정 론적 순서를 얻는 유일한 방법은 "sort_keys = True"를 사용하는 것입니다. 나는 영숫자 순서로 배치한다고 가정합니다. 순서가 왜 그렇게 중요합니까?
OrderedDict
표준 라이브러리에서 시도하십시오 collections
.
>>> 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
다른 곳에서 논의 된 OrderedDict는 문제에 대한 대부분의 해결책이며 'ObjDict'가 더 좋을 수 있습니다.
그러나로드시 순서를 유지해야하는 경우 값을 OrderedDict에로드하기 위해 json.loads ()도 필요합니다. 이 사용을 수행하려면
from collections import OrderedDict
values=json.loads(jsontext,object_pairs_hook=OrderedDict)
그렇지 않으면 json 파일이 순서대로되어 있어도로드 될 때 해당 순서가 손실됩니다.
아마도 더 나은 해결책은 OrderedDict 대신 'ObjDict'를 사용하는 것입니다. 이를 위해서는 pip 설치 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 객체에 나타나는 순서대로 항목을 인쇄합니다. 경우에 따라 이것은 기본 영숫자 정렬 순서와 동일 할 수 있습니다. 귀하의 예에서 "형식"은 "요청"뒤에 오기 때문에 키는 그렇게 정렬되지 않았습니다. 그럼에도 불구 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 데이터를 정렬 할 수 있습니다.
sotred_json = json.dumps(values, sort_keys=True)
정렬 할 필요가 없으면 간단히 제공
unsotred_json = json.dumps(values)
또는:
unsotred_json = json.dumps(values, sort_keys=False)
참고 URL : https://stackoverflow.com/questions/2774361/json-output-sorting-in-python
'IT TIP' 카테고리의 다른 글
속성에 대한 고유 한 유효성 검사 규칙이있는 Laravel 업데이트 모델 (0) | 2020.12.13 |
---|---|
지금부터 5 초 후 Java로 어떻게 말합니까? (0) | 2020.12.13 |
Rails ActiveRecord 모델을 읽기 전용으로 만드는 쉬운 방법이 있습니까? (0) | 2020.12.13 |
AndroidManifest.xml이 누락되었습니다. (0) | 2020.12.13 |
PHP 날짜는 현재 날짜에 5 년 추가 (0) | 2020.12.13 |