Maison  >  Article  >  développement back-end  >  Pourquoi l'ordre des clés dans ma sortie JSON est-il différent de l'ordre dans mon dictionnaire Python utilisant « json.dumps » ?

Pourquoi l'ordre des clés dans ma sortie JSON est-il différent de l'ordre dans mon dictionnaire Python utilisant « json.dumps » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 21:08:01779parcourir

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

Éléments hors service dans les objets JSON avec "json.dumps" ?

Dans votre code, vous utilisez "json .dumps" pour convertir une liste de dictionnaires en JSON. Cependant, vous avez remarqué que l'ordre des clés dans chaque dictionnaire n'est pas celui attendu. Plus précisément, vous devez que les clés apparaissent dans l'ordre "id", "name" et "timezone".

Raisonnement

Les deux dictionnaires Python (avant Python 3.7) et les objets JSON sont des collections non ordonnées. Cela signifie que l'ordre des clés dans un dictionnaire ou un objet JSON n'est pas garanti.

Solution 1 : Trier les clés

Vous pouvez utiliser le paramètre "sort_keys" de "json.dumps" pour trier les clés dans le JSON de sortie. Par exemple :

<code class="python">import json

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

Cela affichera JSON avec les clés dans l'ordre suivant :

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

Solution 2 : Utilisation de OrderedDict

Si vous avez besoin d'un ordre spécifique pour les clés, vous pouvez utiliser la classe "collections.OrderedDict". OrderedDict conserve l'ordre des clés qui y sont insérées. Par exemple :

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

Cela affichera JSON avec les clés dans l'ordre "id", "name" et "timezone".

Remarque supplémentaire

Dans Python 3.6 et versions ultérieures, l'ordre des arguments des mots-clés est conservé dans les dictionnaires. Cela signifie que vous pouvez obtenir le même résultat qu'en utilisant OrderedDict en spécifiant simplement les clés dans l'ordre souhaité lors de la création du dictionnaire :

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

Cela conservera automatiquement l'ordre des clés dans le JSON de sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn