「json.dumps」を使用した JSON オブジェクトの順序が間違っている項目?
コードでは、「json」を使用しています.dumps」を使用して辞書のリストを JSON に変換します。ただし、各辞書内のキーの順序が予想どおりではないことに気づきました。具体的には、キーが「id」「name」「timezone」の順に出現する必要があります。
Reasoning
両方の Python 辞書 (Python より前) 3.7) および JSON オブジェクトは順序付けされていないコレクションです。これは、辞書または JSON オブジェクト内のキーの順序が保証されていないことを意味します。
解決策 1: キーの並べ替え
の "sort_keys" パラメーターを使用できます。 「json.dumps」は、出力 JSON 内のキーを並べ替えます。例:
<code class="python">import json countries.append({"id":row.id,"name":row.name,"timezone":row.timezone}) print(json.dumps(countries, sort_keys=True))</code>
これにより、次の順序でキーを含む JSON が出力されます:
[ {"id": 1, "name": "Mauritius", "timezone": 4}, {"id": 2, "name": "France", "timezone": 2}, {"id": 3, "name": "England", "timezone": 1}, {"id": 4, "name": "USA", "timezone": -4} ]
解決策 2: OrderedDict を使用する
キーに特定の順序が必要な場合は、「collections.OrderedDict」クラスを使用できます。 OrderedDict は、そこに挿入されたキーの順序を保持します。例:
<code class="python">from collections import OrderedDict countries_by_id = OrderedDict() countries_by_id["id"] = row.id countries_by_id["name"] = row.name countries_by_id["timezone"] = row.timezone print(json.dumps(countries_by_id))</code>
これにより、「id」、「name」、「timezone」の順にキーを持つ JSON が出力されます。
補足
Python 3.6 以降では、キーワード引数の順序が辞書に保存されます。これは、辞書の作成時に目的の順序でキーを指定するだけで、OrderedDict を使用した場合と同じ結果を達成できることを意味します。
<code class="python">countries = {"id": row.id, "name": row.name, "timezone": row.timezone}</code>
これにより、出力 JSON 内のキーの順序が自動的に保持されます。
以上がJSON 出力内のキーの順序が、`json.dumps` を使用した Python 辞書内の順序と異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。