L’échange de données en Python avec le module Json

Dans cette leçon, nous allons brièvement présenter un format d’échange de données extrêmement connu dans le monde de la programmation appelé JSON (JavaScript Object Notation) et voir comment on peut l’utiliser pour échanger des données Python ou pour recevoir des données JSON et les convertir en données Python.

 

Présentation de JSON

JSON (JavaScript Object Notation) est un format d’échange de données dont la syntaxe s’inspire des objets littéraux JavaScript bien que JSON n’appartienne pas au JavaScript.

JSON peut représenter des nombres, des booléens, des chaînes, la valeur null, des séquences de valeurs ordonnées, des objets, etc. JSON ne représente pas nativement des types de données plus complexes tels que des fonctions, des expressions régulières, des dates, etc.

La légèreté, la simplicité et les performances de cette notation ont fait de JSON le standard pour l’échange de données. De nombreux langages -dont Python- proposent donc aujourd’hui leurs fonctions pour transformer des données en JSON et inversement.

 

Le format de données JSON

JSON est un format d’échange de données pensé pour gérer deux structures de données universelles :

  • Une collection de paires nom / valeur. Dans les différentes langages, ce type de structure peut s’appeler objet, enregistrement, dictionnaire, table de hachage, liste à clé ou tableau associatif.
  • Une liste ordonnée de valeurs. Dans la plupart des langages, c’est ce qu’on va appeler tableau, liste, vecteur ou séquence.

En JSON, ces deux structures se retrouvent sous les formes suivantes :

  • Un objet est un ensemble non ordonnées de paires nom : valeur. Un objet commence avec { et se termine avec }. Les noms sont suivis de : et les paires nom : valeur sont séparées par des ,
  • Un tableau est une collection ordonnée de valeurs. Un tableau commence avec [ et se termine avec ]. Les valeurs sont séparées par des ,

Une valeur peut être une chaine de caractères entourées par des guillemets doubles, un nombre, un booléen, la valeur null, un objet ou un tableau.

Exemple de données au format JSON :

Exemple de données au format JSON

 

Le module Python json

Pour formater des données Python en JSON et inversement, nous allons utiliser le module Python standard json.

Lorsqu’on encode des données au format JSON, on dit également qu’on “sérialise” les données. Ce terme fait référence à la transformation de données en une série d’octets. Le processus inverse de décodage de données encodées au format JSON est également appelé “désérialisation”.

La sérialisation des données Python

Pour sérialiser des données, c’est-dire pour convertir un objet Python en chaine JSON, nous allons pouvoir utiliser l’une des méthodes dump() ou dumps() du module json.

La méthode dump() permet d’enregistrer les données JSON dans un fichier tandis que dumps() (=“dump string”) renvoie simplement les données sous forme de chaine JSON et nous permet de continuer à travailler avec elles.

Les objets Python vont être convertis selon la table d’équivalence suivante :

PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

Prenons immédiatement un exemple :

Sérialisation de données Python en JSON

Ici, on définit un dictionnaire Python pierre qui contient des données de types différents.

On ouvre ensuite un fichier “pierre.json” en écriture avec open() puis on écrit les données sérialisées à l’intérieur grâce à dump(). On passe deux arguments à dump() : les données à sérialisme et l’objet de type file (fichier) dans lequel elle doivent être écrites.

On utilise enfin la méthode dumps() pour convertir à nouveau les données en chaine JSON et on les stocke dans une variable pour pouvoir s’en resservir dans elle reste du script. On affiche affiche le contenu de la variable qui est bien une chaine JSON constituée de différentes données formatées selon la table d’équivalence donnée ci-dessus.

En réalité, vous devez savoir que les méthodes dump() et dumps() acceptent de nombreux arguments qui vont nous permettre de personnaliser le comportement et notamment d’arranger nos données comme des arguments de type “indentation”, “séparateur” ou “classement des clefs” pour indenter les données, choisir nos séparateurs entre les valeurs ou classer les données par clefs.

La désérialisation des données JSON

De la même façon, nous allons pouvoir utiliser l’une des méthodes load() et loads() pour désérialiser des données JSON, c’st-à-dire pour convertir des données JSON en objet Python.

La méthode load() permet de désérialiser des données JSON écrites dans un fichier tandis que loads() permet de désérialiser des données directement sous forme due chaine JSON.

La table de conversion des donnés va être la même que la précédente. En reprenant notre exemple suivant, voici le résultat qu’on obtient :

Désérialisation de données JSON en Python

Laisser un commentaire