Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah susunan kunci dalam output JSON saya berbeza daripada susunan dalam kamus Python saya menggunakan `json.dumps`?

Mengapakah susunan kunci dalam output JSON saya berbeza daripada susunan dalam kamus Python saya menggunakan `json.dumps`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 21:08:01780semak imbas

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

Item Luar Pesanan dalam Objek JSON dengan "json.dumps"?

Dalam kod anda, anda menggunakan "json .dumps" untuk menukar senarai kamus kepada JSON. Walau bagaimanapun, anda perasan bahawa susunan kunci dalam setiap kamus tidak seperti yang diharapkan. Khususnya, anda memerlukan kunci untuk muncul dalam susunan "id", "nama" dan "zon waktu".

Penaakulan

Kedua-dua kamus Python (sebelum Python 3.7) dan objek JSON ialah koleksi tidak tertib. Ini bermakna susunan kekunci dalam kamus atau objek JSON tidak dijamin.

Penyelesaian 1: Isih Kunci

Anda boleh menggunakan parameter "sort_keys" bagi "json.dumps" untuk mengisih kekunci dalam output JSON. Contohnya:

<code class="python">import json

countries.append({"id":row.id,"name":row.name,"timezone":row.timezone})
print(json.dumps(countries, sort_keys=True))</code>

Ini akan mengeluarkan JSON dengan kekunci dalam susunan berikut:

[
   {"id": 1, "name": "Mauritius", "timezone": 4}, 
   {"id": 2, "name": "France", "timezone": 2}, 
   {"id": 3, "name": "England", "timezone": 1}, 
   {"id": 4, "name": "USA", "timezone": -4}
]

Penyelesaian 2: Menggunakan OrderedDict

Jika anda memerlukan susunan khusus untuk kunci, anda boleh menggunakan kelas "collections.OrdedDict". OrderedDict mengekalkan susunan kekunci yang dimasukkan ke dalamnya. Contohnya:

<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>

Ini akan mengeluarkan JSON dengan kekunci dalam susunan "id", "nama" dan "zon waktu".

Nota Tambahan

Dalam Python 3.6 dan lebih baru, susunan hujah kata kunci disimpan dalam kamus. Ini bermakna anda boleh mencapai hasil yang sama seperti menggunakan OrderedDict dengan hanya menyatakan kekunci dalam susunan yang diingini semasa mencipta kamus:

<code class="python">countries = {"id": row.id, "name": row.name, "timezone": row.timezone}</code>

Ini akan mengekalkan susunan kunci dalam output JSON secara automatik.

Atas ialah kandungan terperinci Mengapakah susunan kunci dalam output JSON saya berbeza daripada susunan dalam kamus Python saya menggunakan `json.dumps`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn