Convertir Python Dict en JSON : un didacticiel pour les débutants

Convert Python Dict to JSON: A Tutorial for Beginners


c_convert_python_dict_json_tutorial_beginners_1 Convertir Python Dict en JSON : un didacticiel pour les débutants Intelligence artificielle
Image par auteur

Lors de la création d’applications en Python, JSON est l’un des formats de données courants avec lesquels vous travaillerez. Et si vous avez déjà travaillé avec des API, vous êtes probablement déjà familiarisé avec l’analyse des réponses JSON des API.

Comme vous le savez, JSON est un format texte pour l’échange de données, qui stocke les données dans des paires clé-valeur et est lisible par l’homme. Et les dictionnaires Python stockent les données dans des paires clé-valeur. Ce qui rend intuitif le chargement de chaînes JSON dans des dictionnaires pour le traitement et également le transfert des données des dictionnaires dans les chaînes JSON.

Dans ce tutoriel, nous allons apprendre à convertir un dictionnaire Python en JSON à l’aide de l’outil module json intégré. Alors commençons à coder !

Pour convertir un dictionnaire Python en chaîne JSON, vous pouvez utiliser le dumps() fonction du module json. Le dumps() La fonction prend un objet Python et renvoie la représentation sous forme de chaîne JSON. En pratique, cependant, vous devrez convertir non pas un seul dictionnaire mais un ensemble tel qu’une liste de dictionnaires.

Alors choisissons un tel exemple. Disons que nous avons books, une liste de dictionnaires, où chaque dictionnaire contient des informations sur un livre. Ainsi, chaque enregistrement de livre se trouve dans un dictionnaire Python avec les clés suivantes : titre, auteur, année_de publication et genre.

En appelant json.dumps()nous définissons l’option indent paramètre : l’indentation dans la chaîne JSON car elle contribue à améliorer la lisibilité (oui, nous sommes en train d’imprimer joliment le json ??) :

import json

books = [
	{
    	"title": "The Great Gatsby",
    	"author": "F. Scott Fitzgerald",
    	"publication_year": 1925,
    	"genre": "Fiction"
	},
	{
    	"title": "To Kill a Mockingbird",
    	"author": "Harper Lee",
    	"publication_year": 1960,
    	"genre": "Fiction"
	},
	{
    	"title": "1984",
    	"author": "George Orwell",
    	"publication_year": 1949,
    	"genre": "Fiction"
	}
]

# Convert dictionary to JSON string
json_string = json.dumps(books, indent=4)
print(json_string)

Lorsque vous exécutez le code ci-dessus, vous devriez obtenir un résultat similaire :

Output >>>
[
	{
    	"title": "The Great Gatsby",
    	"author": "F. Scott Fitzgerald",
    	"publication_year": 1925,
    	"genre": "Fiction"
	},
	{
    	"title": "To Kill a Mockingbird",
    	"author": "Harper Lee",
    	"publication_year": 1960,
    	"genre": "Fiction"
	},
	{
    	"title": "1984",
    	"author": "George Orwell",
    	"publication_year": 1949,
    	"genre": "Fiction"
	}
]

Ensuite, prenons une liste de dictionnaires Python imbriqués et obtenons-en la représentation JSON. Prolongons le books dictionnaire en ajoutant une clé « avis ». Dont la valeur est une liste de dictionnaires, chaque dictionnaire contenant des informations sur un avis, à savoir « utilisateur », « note » et « commentaire ».

Nous modifions donc le books dictionnaire comme ceci :

import json

books = [
	{
    	"title": "The Great Gatsby",
    	"author": "F. Scott Fitzgerald",
    	"publication_year": 1925,
    	"genre": "Fiction",
    	"reviews": [
        	{"user": "Alice", "rating": 4, "comment": "Captivating story"},
        	{"user": "Bob", "rating": 5, "comment": "Enjoyed it!"}
    	]
	},
	{
    	"title": "To Kill a Mockingbird",
    	"author": "Harper Lee",
    	"publication_year": 1960,
    	"genre": "Fiction",
    	"reviews": [
        	{"user": "Charlie", "rating": 5, "comment": "A great read!"},
        	{"user": "David", "rating": 4, "comment": "Engaging narrative"}
    	]
	},
	{
    	"title": "1984",
    	"author": "George Orwell",
    	"publication_year": 1949,
    	"genre": "Fiction",
    	"reviews": [
        	{"user": "Emma", "rating": 5, "comment": "Orwell pulls it off well!"},
        	{"user": "Frank", "rating": 4, "comment": "Dystopian masterpiece"}
    	]
	}
]

# Convert dictionary to JSON string
json_string = json.dumps(books, indent=4)
print(json_string)

Notez que nous utilisons la même valeur d’indentation de 4 et que l’exécution du script donne le résultat suivant :

Output >>>

[
	{
    	"title": "The Great Gatsby",
    	"author": "F. Scott Fitzgerald",
    	"publication_year": 1925,
    	"genre": "Fiction",
    	"reviews": [
        	{
            	"user": "Alice",
            	"rating": 4,
            	"comment": "Captivating story"
        	},
        	{
            	"user": "Bob",
            	"rating": 5,
            	"comment": "Enjoyed it!"
        	}
    	]
	},
	{
    	"title": "To Kill a Mockingbird",
    	"author": "Harper Lee",
    	"publication_year": 1960,
    	"genre": "Fiction",
    	"reviews": [
        	{
            	"user": "Charlie",
            	"rating": 5,
            	"comment": "A great read!"
        	},
        	{
            	"user": "David",
            	"rating": 4,
            	"comment": "Engaging narrative"
        	}
    	]
	},
	{
    	"title": "1984",
    	"author": "George Orwell",
    	"publication_year": 1949,
    	"genre": "Fiction",
    	"reviews": [
        	{
            	"user": "Emma",
            	"rating": 5,
            	"comment": "Orwell pulls it off well!"
        	},
        	{
            	"user": "Frank",
            	"rating": 4,
            	"comment": "Dystopian masterpiece"
        	}
    	]
	}
]

Le dumps La fonction a plusieurs paramètres facultatifs. Nous avons déjà utilisé un de ces paramètres facultatifs indent. Un autre paramètre utile est sort_keys. Ceci est particulièrement utile lorsque vous devez trier les clés du dictionnaire Python lors de sa conversion en JSON.

Parce que sort_keys est réglé sur False par défaut, vous pouvez donc le définir sur True si vous devez trier les clés lors de la conversion en JSON.

Voici un simple person dictionnaire:

import json

person = {
	"name": "John Doe",
	"age": 30,
	"email": "john@example.com",
	"address": {
    	"city": "New York",
    	"zipcode": "10001",
    	"street": "123 Main Street"
	}
}

# Convert dictionary to a JSON string with sorted keys
json_string = json.dumps(person, sort_keys=True, indent=4)
print(json_string)

Comme on le voit, les clés sont triées par ordre alphabétique :

Output >>>
{
	"address": {
    	"city": "New York",
    	"street": "123 Main Street",
    	"zipcode": "10001"
	},
	"age": 30,
	"email": "john@example.com",
	"name": "John Doe"
}

Dans les exemples que nous avons codés jusqu’à présent, les clés et les valeurs du dictionnaire sont toutes sérialisables en JSON. Les valeurs étaient toutes des chaînes ou des entiers pour être précis. Mais ce n’est peut-être pas toujours le cas. Certains types de données non sérialisables courants incluent datetime, Decimalet set.

Pas de soucis cependant. Vous pouvez gérer ces types de données non sérialisables en définissant des fonctions de sérialisation personnalisées pour ces types de données. Et puis régler le default paramètre de json.dumps() aux fonctions personnalisées que vous définissez.

Ces fonctions de sérialisation personnalisées devraient convertir les données non sérialisables dans un format sérialisable JSON (qui l’aurait deviné !).

Voici un simple data dictionnaire:

import json
from datetime import datetime

data = {
	"event": "Meeting",
	"date": datetime.now()
}

# Try converting dictionary to JSON
json_string = json.dumps(data, indent=2)
print(json_string)

Nous avons utilisé json.dumps() comme avant, nous allons donc rencontrer l’exception TypeError suivante :

Traceback (most recent call last):
  File "/home/balapriya/djson/main.py", line 10, in 
	json_string = json.dumps(data, indent=2)
              	^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/__init__.py", line 238, in dumps
	**kw).encode(obj)
      	^^^^^^^^^^^
...
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
	raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable

La partie pertinente de l’erreur est la suivante : L’objet de type datetime n’est pas sérialisable JSON. Très bien, procédons maintenant comme suit :

  • Définir un serialize_datetime fonction qui convertit datetime objets au format ISO 8601 en utilisant le isoformat() méthode.
  • En appelant json.dumps()nous définissons le default paramètre au serialize_datetime fonction.

Le code ressemble donc à ceci :

import json
from datetime import datetime

# Define a custom serialization function for datetime objects
def serialize_datetime(obj):
	if isinstance(obj, datetime):
    	return obj.isoformat()

data = {
	"event": "Meeting",
	"date": datetime.now()
}

# Convert dictionary to JSON 
# with custom serialization for datetime
json_string = json.dumps(data, default=serialize_datetime, indent=2)
print(json_string)

Et voici le résultat :

Output >>>
{
  "event": "Meeting",
  "date": "2024-03-19T08:34:18.805971"
}

Et voila!

Pour récapituler : nous avons passé en revue la conversion d’un dictionnaire Python en JSON et l’utilisation du indent et sort_keys paramètres selon les besoins. Nous avons également appris à gérer les erreurs de sérialisation JSON.

Vous pouvez trouver les exemples de code sur GitHub. Je vous reverrai tous dans un autre tutoriel. En attendant, continuez à coder !

Bala Priya C est un développeur et rédacteur technique indien. Elle aime travailler à l’intersection des mathématiques, de la programmation, de la science des données et de la création de contenu. Ses domaines d’intérêt et d’expertise incluent le DevOps, la science des données et le traitement du langage naturel. Elle aime lire, écrire, coder et prendre le café ! Actuellement, elle travaille à l’apprentissage et au partage de ses connaissances avec la communauté des développeurs en créant des didacticiels, des guides pratiques, des articles d’opinion, etc. Bala crée également des aperçus de ressources attrayants et des didacticiels de codage.





Source link