Beaucoup de données réelles ne tiennent pas dans une grille : une observation contient plusieurs mesures, des sous-parties, des champs optionnels. JSON et XML savent représenter ces structures en arbre.
| En JSON | En Python |
|---|---|
| { } | dictionnaire (hashmap) |
| [ ] | liste (tableau) |
| "..." | chaine de caractères |
| 12 / 1.5 | int / float |
| true / false / null | True / False / None |
Petit secret du nom : JSON = JavaScript Object Notation. C'est la syntaxe du langage JavaScript pour ses objets (hashmaps) { } et ses tableaux [ ] - et elle est identique à celle de Python.
Bonne nouvelle : le JSON ressemble presque exactement aux dictionnaires et listes Python (vus au jour des fichiers). Lire du JSON, c'est obtenir directement un dict prêt à l'emploi.
json.loadjson.load(fichier) lit un fichier et le transforme en dict / liste Python. On accède ensuite aux valeurs par leur clé (donnees["espece"]), exactement comme un dictionnaire.
Variante : json.loads(texte) (avec un s) part d'une chaine déjà en mémoire au lieu d'un fichier.
json.dumpjson.dump écrit un dict Python dans un fichier (ouvert en mode "w" = écriture). indent=2 le rend lisible (indenté), et ensure_ascii=False garde les accents (é, à) au lieu de les coder en é.
La plupart des API du web (météo, NASA, cartes, etc.) répondent en JSON. Avec requests, .json() convertit la réponse directement en dict/liste - pas besoin de fichier intermédiaire. (Voir le diaporama « Accès aux données distantes ».)
XML décrit les données avec des balises qui s'emboitent (comme le HTML, son cousin). C'est le format de beaucoup de fichiers de configuration, de cartes, et d'échanges entre logiciels.
ElementTreeET.parse lit le fichier, getroot() donne la racine de l'arbre. findall("arbre") trouve tous les noeuds d'un nom, find("espece") un seul à l'intérieur, et .text récupère le texte entre les balises.
Si le XML est régulier (toujours les mêmes balises), pandas le lit et l'écrit comme un CSV : read_xml / to_xml. Pour une structure libre, on construit l'arbre à la main avec ElementTree.
| La donnée est... | Format | Outil |
|---|---|---|
| une grille régulière | CSV · Excel | pandas, csv |
| imbriquée (listes, sous-objets) | JSON | json.load / dump |
| une réponse d'API web | JSON | requests .json() |
| des balises (config, échanges) | XML | ElementTree, pandas |
Le réflexe : la donnée est-elle plate ou imbriquée ? Plate → CSV/Excel. Imbriquée → JSON (surtout pour le web) ou XML. Et dans tous les cas, Python sait la lire ET la réécrire.