Convertisseur JSON en CSV

Collez du JSON ou ouvrez un fichier pour obtenir un CSV pour Excel ou Google Sheets, ou changez le sens et transformez un CSV en JSON. Les objets imbriqués deviennent des colonnes à points, les guillemets et les virgules dans les valeurs sont gérés, et les premières lignes sont affichées sous forme de tableau.

Sens
Un tableau d’objets, un seul objet, une réponse d’API contenant un tableau, ou du JSON Lines (un objet par ligne).
Séparateur
Options

Collez du JSON dans le champ, ouvrez un fichier ou essayez l’exemple.

Vous exportez des listes de serveurs, des journaux ou des réponses d’API vers un tableur ? Quand il vous faut le serveur lui-même : À partir de 3,02 € par mois aujourd’hui, parmi 2 226 serveurs.

Fonctionne dans votre navigateur : rien de ce que vous saisissez n’est envoyé ailleurs.

Comment fonctionne la conversion

JSON vers CSV : chaque objet du tableau devient une ligne. Les colonnes sont toutes les clés présentes dans au moins un objet, dans l’ordre où elles apparaissent pour la première fois ; un objet sans une clé reçoit donc une cellule vide. Les objets imbriqués sont aplatis en colonnes à points comme host.name, et les tableaux sont écrits sous forme de texte JSON dans une cellule, car une liste ne tient pas dans une seule colonne de tableur. Les nombres sont conservés tels qu’ils sont écrits : les longs identifiants ne sont donc pas arrondis.

Les guillemets suivent la RFC 4180, la norme du CSV : une valeur qui contient le séparateur, un guillemet double ou un saut de ligne est entourée de guillemets doubles, et un guillemet à l’intérieur est écrit deux fois. Les autres valeurs restent telles quelles. Choisissez le point-virgule si votre tableur utilise la virgule pour les décimales, comme Excel dans une grande partie de l’Europe.

CSV vers JSON : l’analyseur lit les champs entre guillemets, les guillemets doublés, les sauts de ligne à l’intérieur de guillemets et les fins de ligne CRLF, LF ou CR. Il détecte le séparateur d’après les premières lignes, en cherchant celui qui les découpe en un même nombre de champs. Avec une ligne d’en-tête, vous obtenez un objet par ligne ; sans, un tableau par ligne. Le typage transforme 42, 3.5, true, false et null en valeurs JSON, mais laisse 007 et les très grands nombres en texte, pour que les codes postaux et les identifiants survivent.

Exemple

Deux serveurs, l’un avec un objet host imbriqué et une liste de ports, l’autre sans adresse IP et avec une virgule dans sa note :

servers.json
[
  { "id": 1, "host": { "name": "web-1", "ip": "203.0.113.10" }, "ports": [80, 443] },
  { "id": 2, "host": { "name": "db-1" }, "note": "primary, eu" }
]

Les colonnes sont l’union de toutes les clés. host devient host.name et host.ip, le tableau ports reste du texte JSON et est entouré de guillemets parce qu’il contient une virgule, l’IP et les ports manquants sont des cellules vides, et la note est entre guillemets à cause de sa virgule :

servers.csv
id,host.name,host.ip,ports,note
1,web-1,203.0.113.10,"[80,443]",
2,db-1,,,"primary, eu"

Reconvertir ce CSV avec le typage et l’imbrication activés redonne les objets. L’id est de nouveau un nombre et host un objet, mais les ports reviennent sous la forme du texte "[80,443]" et les cellules vides sous la forme de chaînes vides, car une cellule CSV ne peut pas dire qu’elle était une liste ou qu’elle manquait :

servers.json
[
  {"id":1,"host":{"name":"web-1","ip":"203.0.113.10"},"ports":"[80,443]","note":""},
  {"id":2,"host":{"name":"db-1","ip":""},"ports":"","note":"primary, eu"}
]

Questions

Comment convertir du JSON en CSV ?

Collez le JSON ci-dessus ou ouvrez un fichier .json, gardez JSON → CSV sélectionné et choisissez un séparateur. Le CSV apparaît aussitôt avec un aperçu en tableau ; copiez-le ou téléchargez-le en fichier .csv et ouvrez-le dans Excel, Google Sheets ou LibreOffice. Le JSON doit être un tableau d’objets, mais un seul objet, une réponse d’API contenant un tableau et du JSON Lines fonctionnent aussi.

Comment convertir du CSV en JSON ?

Passez le sens sur CSV → JSON, puis collez le CSV ou ouvrez un fichier .csv. Le séparateur est détecté pour vous. Avec la première ligne comme noms de colonnes, chaque ligne devient un objet ; désactivez cette option pour obtenir des tableaux. Activez le typage pour obtenir des nombres et true ou false au lieu de chaînes, et l’imbrication pour retransformer des colonnes comme server.cpu en objets.

Que deviennent les objets et les tableaux JSON imbriqués ?

Les objets imbriqués sont aplatis en colonnes à points : un objet host avec un name devient une colonne host.name, à n’importe quelle profondeur. Les tableaux sont écrits sous forme de texte JSON dans une seule cellule, par exemple [80,443], car une liste n’a pas de place naturelle dans une cellule. Désactivez l’aplatissement pour garder aussi les objets imbriqués sous forme de texte JSON.

Pourquoi Excel met-il mon CSV dans une seule colonne ou abîme-t-il les accents ?

Excel utilise le séparateur de liste de votre système : là où la marque décimale est la virgule, comme en Allemagne ou en France, il attend des points-virgules. Choisissez Point-virgule ici et les colonnes se séparent. Des accents abîmés signifient qu’Excel a lu le fichier avec une ancienne page de codes au lieu d’UTF-8 ; cochez l’option de marque d’ordre des octets avant de télécharger, ou importez le fichier avec Données → À partir d’un fichier texte/CSV et choisissez UTF-8.

Comment convertir du JSON en CSV en ligne de commande ?

Avec jq, pour un tableau d’objets plats : jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]]) | @csv' data.json > data.csv. Les colonnes viennent du premier objet seulement. Pour CSV vers JSON, Python n’a besoin d’aucun paquet supplémentaire : python3 -c "import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin))))" < data.csv.