Aller au contenu

JSON

On utilise le module json :

>>> import json

Encodage JSON

>>> dico = {"toto": "tata"}
>>> json.dumps(dico)
'{"toto": "tata"}'

Info

Le module json produit toujours des objets str.

>>> dico = {"toto": "tata"}
>>> type(json.dumps(dico))
<class 'str'>

Si ensure_ascii est vrai (par défaut), il est garanti que les caractères non ASCII soient tous échappés sur la sortie. Si ensure_ascii est faux, ces caractères seront écrits comme tels.

>>> dico = {"toto": "éléphant"}
>>> print(json.dumps(dico))
{"toto": "\u00e9l\u00e9phant"}
>>> print(json.dumps(dico, ensure_ascii=False))
{"toto": "éléphant"}

Il existe des options supplémentaires bien pratiques comme indent et sort_keys :

>>> dico = {"b": "world!", "a": "Hello"}
>>> print(json.dumps(dico, indent=4, sort_keys=True))
{
    "a": "Hello",
    "b": "world!"
}

Décodage JSON

>>> texte = '{"toto": "éléphant"}' # texte unicode
>>> json.loads(texte)
{'toto': 'éléphant'}               # dictionnaire
>>> type(json.loads(texte))
<class 'dict'>

Encoder un fichier JSON

#!/usr/bin/env python3
# -*- coding: utf_8 -*-

import json

dico = {"toto": "éléphant"}
texte = json.dumps(dico, ensure_ascii=False, indent=4)

with open("test.json", mode="w", encoding="utf_8") as mon_fichier:
    mon_fichier.write(texte)

Décoder depuis un fichier JSON

#!/usr/bin/env python3
# -*- coding: utf_8 -*-

import json

with open("test.json", mode="r", encoding="utf_8", errors="strict") as mon_fichier:
    contenu = mon_fichier.read()
    dico = json.loads(contenu)
    print(dico)

Ressources