반응형
질문
Ok so I can use an OrderedDict in json.dump
. That is, an OrderedDict can be used as an input to JSON.
But can it be used as an output? If so how? In my case I'd like to load
into an OrderedDict so I can keep the order of the keys in the file.
If not, is there some kind of workaround?
그래서 json.dump
에서 OrderedDict를 사용할 수 있습니다. 즉, OrderedDict를 JSON의 입력으로 사용할 수 있습니다.
하지만 출력으로 사용할 수 있을까요? 그렇다면 어떻게 해야 할까요? 제 경우에는 키의 순서를 파일에 유지하기 위해 OrderedDict에 load
하고 싶습니다.
만약 그렇지 않다면, 어떤 해결책이 있을까요?
답변
네, 가능합니다. object_pairs_hook
인수를 JSONDecoder에 지정함으로써 가능합니다. 사실, 이것은 문서에서 제공하는 정확한 예제입니다.
>>> json.JSONDecoder(object_pairs_hook=collections.OrderedDict).decode('{"foo":1, "bar": 2}')
OrderedDict([('foo', 1), ('bar', 2)])
>>>
만약 다른 목적을 위해 Decoder 인스턴스가 필요하지 않다면, 이 매개변수를 json.loads
에 전달할 수 있습니다:
>>> import json
>>> from collections import OrderedDict
>>> data = json.loads('{"foo":1, "bar": 2}', object_pairs_hook=OrderedDict)
>>> print json.dumps(data, indent=4)
{
"foo": 1,
"bar": 2
}
>>>
json.load
을 사용하는 방법도 동일합니다:
>>> data = json.load(open('config.json'), object_pairs_hook=OrderedDict)
반응형
댓글