ホームページ  >  記事  >  バックエンド開発  >  JSON 出力内のキーの順序が、`json.dumps` を使用した Python 辞書内の順序と異なるのはなぜですか?

JSON 出力内のキーの順序が、`json.dumps` を使用した Python 辞書内の順序と異なるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 21:08:01780ブラウズ

Why is the order of keys in my JSON output different from the order in my Python dictionary using `json.dumps`?

「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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。