Python dict
(Python 3.7より前)とJSONオブジェクトはどちらも順序付けられていないコレクションです。sort_keys
パラメータを渡して、キーを並べ替えることができます。
>>> import json
>>> json.dumps({'a': 1, 'b': 2})
'{"b": 2, "a": 1}'
>>> json.dumps({'a': 1, 'b': 2}, sort_keys=True)
'{"a": 1, "b": 2}'
特定の注文が必要な場合; あなたが使うcollections.OrderedDict
ことができます:
>>> from collections import OrderedDict
>>> json.dumps(OrderedDict([("a", 1), ("b", 2)]))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict([("b", 2), ("a", 1)]))
'{"b": 2, "a": 1}'
Python 3.6以降、キーワード引数の順序は保持され、上記はより良い構文を使用して書き換えることができます。
>>> json.dumps(OrderedDict(a=1, b=2))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict(b=2, a=1))
'{"b": 2, "a": 1}'
PEP 468 – Preserving Keyword Argument Orderを参照してください。
あなたの入力はJSONとして指定されている場合は、(取得する順序を保持するためにOrderedDict
)、あなたが渡すことができobject_pair_hook
、 @Fred Yankowskiによって示唆されているように:
>>> json.loads('{"a": 1, "b": 2}', object_pairs_hook=OrderedDict)
OrderedDict([('a', 1), ('b', 2)])
>>> json.loads('{"b": 2, "a": 1}', object_pairs_hook=OrderedDict)
OrderedDict([('b', 2), ('a', 1)])