8

json文字列をPython辞書に変換したいときに問題が発生します。私は次のような文字列を持っています

 s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}

私が次のようなものを書くとき

tags=json.loads(s)

辞書を作成しましたが、キーの順序は文字列の場合と同じではありません(名前、価格などではありません)。json文字列を辞書に変換して順序をキーに保存する方法は?

4

1 に答える 1

22

Python 2.7以降、OrderedDictモジュールがありますcollections

この種の辞書は、要素の挿入順序を保持します。

Python ドキュメントから:

json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

fp (JSON ドキュメントを含む .read() をサポートするファイルのようなオブジェクト) を Python オブジェクトにデシリアライズします。

fp の内容が UTF-8 以外の ASCII ベースのエンコーディング (例: latin-1) でエンコードされている場合、適切なエンコーディング名を指定する必要があります。ASCII ベースではないエンコーディング (UCS-2 など) は許可されず、codecs.getreader(encoding)(fp) でラップするか、単純に Unicode オブジェクトにデコードして、loads() に渡す必要があります。

object_hook は、デコードされたオブジェクト リテラル (dict) の結果で呼び出されるオプションの関数です。dict の代わりに object_hook の戻り値が使用されます。この機能を使用して、カスタム デコーダー (JSON-RPC クラス ヒンティングなど) を実装できます。

object_pairs_hook は、任意のオブジェクト リテラルをペアの順序付きリストでデコードした結果で呼び出されるオプションの関数です。dict の代わりに object_pairs_hook の戻り値が使用されます。この機能を使用して、キーと値のペアがデコードされる順序に依存するカスタム デコーダーを実装できます (たとえば、collections.OrderedDict() は挿入の順序を記憶します)。object_hook も定義されている場合は、object_pairs_hook が優先されます。

object_pairs_hook パラメータを使用できると思いますcollections.OrderedDict()

tags=json.loads(s, object_pairs_hook=collections.OrderedDict)
于 2012-04-18T10:07:08.610 に答える