La notation objet du langage Javascript JSON (JavaScript Object Notation en anglais) permet de déclarer des données structurées (objets, tableaux, entiers, chaînes de caractères, ...). Les types supportés ont une correspondance avec les types de données Python. Ce format est souvent utilisé dans l'échange de données, ou dans les fichiers de configuration.

Le module json

modifier

Chaînes de caractères

modifier

Le module json possède différentes méthodes permettant la conversion d'une chaîne de caractères au format JSON en données Python et vice-versa.

  • La fonction dumps(data) convertit des données Python en chaîne de caractères au format JSON (Dump to String).
  • La fonction loads(json_string) convertit une chaîne de caractères au format JSON en données Python (Load from String).

Exemple :

import json

def afficher(data)
    print('Données :', data)
    print('Données en JSON :', json.dumps(data))

if __name__ == '__main__':
    # Données python définies par une notation JSON:
    data = json.loads('{"description":"un objet", "total":123, "nombres": [15,7,31,8,62]}')
    afficher(data)
    # Données python définies par la notation littérale en Python :
    data = { 'description': 'un objet', 'total': 123, 'nombres': [15, 7, 31, 8, 62]}
    afficher(data)

Syntaxe JSON et types Python

modifier

La syntaxe JSON semble similaire à celle des types en Python, mais il y a toutefois des différences listées dans le tableau ci-dessous.

Type JSON Type Python
Chaîne de caractères (toujours des guillemets ") "chaîne d'exemple" str Chaîne de caractères (guillemets ", apostrophe ', ...) 'chaîne d\'exemple'
entier 2024 int 2024
nombre à virgule flottante 3.14159 real 3.14159
booléen true bool True
tableau [20, 40, 50] list [20, 40, 50]
object {"titre": "exemple", "numero": 22} dict {"titre": "exemple", "numero": 22}
référence nulle null NoneType None

Flux d'entrée-sortie

modifier

Le module json permet aussi le décodage d'un flux d'entrée et l'encodage vers un flux de sortie.

  • La fonction dump(data, io) écrit les données Python au format JSON vers le flux spécifié.
  • La fonction load(io) retourne les données au format JSON lues à partir du flux spécifié.

Exemple avec un flux écrivant/lisant une chaîne de caractères :

from io import StringIO

data = { 'description': 'un objet', 'total': 123, 'nombres': [15, 7, 31, 8, 62]}
io = StringIO()
json.dump(data, io)
print('Données JSON : ', io.getvalue())

io = StringIO('{"description":"un objet", "total":123, "nombres": [15,7,31,8,62]}')
data = json.load(io)
print('Données lues : ', data)