Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire et écrire du JSON et du YAML

La leçon entière est à lire ici. Créez un compte gratuit pour lancer ses commandes dans un laboratoire et passer ses quiz et ses exercices.

Leçon de 50 minAucune commande

Un ticket qui voyage

Un client de Marseille signale que sa box internet ne marche plus. Le site du support crée un ticket.

Ce ticket passe par trois logiciels : le site, l’outil des techniciens et l’envoi de SMS.

Pour se comprendre, ces logiciels s’échangent les données dans un format texte simple. Le plus courant s’appelle JSON.

À la fin de cette leçon

Remarque

Je peux lire et écrire des données en JSON et en YAML.

Mots-clés

MotCe que ça veut direExemple
JSONun format texte pour échanger des données
Objetdes paires clé et valeur entre accolades{"statut": "ouvert"}
Cléle nom qui donne accès à une valeur"statut"
Listedes valeurs dans l’ordre, entre crochets["box", "wifi"]
Imbricationun objet ou une liste placé dans un autre
YAMLun format qui range les mêmes données par indentation

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un objet JSON range des valeurs par clé

Un objet JSON s’écrit entre accolades { }. Il contient des paires : une clé, deux-points, une valeur.

Les clés et les textes sont entre guillemets doubles. Les nombres s’écrivent sans guillemets.

En Python, json.loads lit ce texte et donne un dictionnaire. On lit une valeur avec sa clé.

Lisez un ticket

Code: python
import json

texte = '{"numero": 812, "client": "Karim", "priorite": "haute"}'
ticket = json.loads(texte)

# Une clé donne sa valeur.
print(ticket["client"])
print(ticket["priorite"])

# À vous : affichez le numéro du ticket.

Une erreur fréquente

Attention

Beaucoup pensent que JSON accepte les guillemets simples, comme Python. C’est faux : {'statut': 'ouvert'} est refusé. En JSON, les clés et les textes prennent toujours des guillemets doubles.

Les données s’emboîtent les unes dans les autres

Une valeur peut être elle-même un objet ou une liste. On parle d’imbrication.

Pour atteindre une valeur profonde, on avance pas à pas : le ticket, puis le client, puis sa ville.

Une liste s’écrit entre crochets. Sa première case porte le numéro 0.

Allez chercher une valeur profonde

Code: python
import json

texte = """
{
  "numero": 812,
  "client": {"nom": "Karim", "ville": "Marseille"},
  "messages": ["Ma box ne répond plus", "Toujours en panne ce soir"]
}
"""
ticket = json.loads(texte)

# Pas à pas : le ticket, puis le client, puis sa ville.
print(ticket["client"]["ville"])

# Une liste compte à partir de 0.
print(ticket["messages"][0])

# À vous : affichez le second message.

Écrire du JSON, lire du YAML

json.dumps fait le chemin inverse : il écrit des données Python en texte JSON.

YAML contient les mêmes données que JSON, sans accolades. Le retrait au début de la ligne montre ce qui est dedans. Un tiret marque un élément de liste.

On trouve du YAML dans les fichiers de configuration des serveurs.

Écrivez du JSON

Code: python
import json

ticket = {"numero": 813, "statut": "ouvert", "tags": ["box", "wifi"]}

# json.dumps transforme les données Python en texte JSON.
print(json.dumps(ticket, ensure_ascii=False))

# À vous : passez le statut à "fermé", puis exécutez.

Le même ticket en YAML

Code: bash
# Le même ticket en YAML
numero: 812
client:
  nom: Karim
  ville: Marseille
messages:
  - Ma box ne répond plus
  - Toujours en panne ce soir

Exemple : JSON et YAML côte à côte

DonnéeEn JSONEn YAML
Une valeur"numero": 812numero: 812
Un objet dans un objet"client": {"ville": "Marseille"}client: puis ville: Marseille en retrait
Une liste"tags": ["box", "wifi"]tags: puis - box et - wifi en retrait

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.