json文字列をPython辞書に変換したいときに問題が発生します。私は次のような文字列を持っています
s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}
私が次のようなものを書くとき
tags=json.loads(s)
辞書を作成しましたが、キーの順序は文字列の場合と同じではありません(名前、価格などではありません)。json文字列を辞書に変換して順序をキーに保存する方法は?
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)