457

わかりましたので、 で OrderedDict を使用できますjson.dump。つまり、OrderedDict を JSON への入力として使用できます。

しかし、それは出力として使用できますか?もしそうなら、どのように?私の場合load、 OrderedDict に入りたいので、ファイル内のキーの順序を維持できます。

そうでない場合、何らかの回避策はありますか?

4

6 に答える 6

649

はい、できます。JSONDecoderobject_pairs_hookに引数を指定する。実際、これはドキュメントに記載されている正確な例です。

>>> json.JSONDecoder(object_pairs_hook=collections.OrderedDict).decode('{"foo":1, "bar": 2}')
OrderedDict([('foo', 1), ('bar', 2)])
>>> 

次のように、このパラメーターをjson.loads(他の目的で Decoder インスタンスが必要ない場合)に渡すことができます。

>>> 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)
于 2011-08-03T04:48:33.113 に答える
129

Python2.7以降のシンプルなバージョン

my_ordered_dict = json.loads(json_str, object_pairs_hook=collections.OrderedDict)

またはPython2.4から2.6の場合

import simplejson as json
import ordereddict

my_ordered_dict = json.loads(json_str, object_pairs_hook=ordereddict.OrderedDict)
于 2011-08-03T05:00:36.880 に答える
7

dictをダンプするだけでなく、いつでもキーのリストを書き出してから、リストをOrderedDict反復処理して再構築することができますか?

于 2011-08-03T04:41:59.450 に答える
5

object_pairs_hookパラメーターを指定すると、通常使用される load コマンドが機能します。

import json
from  collections import OrderedDict
with open('foo.json', 'r') as fp:
    metrics_types = json.load(fp, object_pairs_hook=OrderedDict)
于 2017-11-16T08:22:30.933 に答える