Maison >développement back-end >Tutoriel Python >Pourquoi l'ordre des clés dans ma sortie JSON est-il différent de l'ordre dans mon dictionnaire Python utilisant « 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!