100 % local — vos données ne quittent jamais votre navigateur

JSON en NDJSON — un enregistrement par ligne

Transformez un tableau JSON en JSON délimité par des sauts de ligne. Un document par ligne, minifié, prêt pour bq load ou une API de flux.

Instantané Privé Zéro cookie

Entrée JSON

Sortie NDJSON

Ce que fait cet outil

Un tableau JSON devient un document JSON par ligne.

[
  { "id": 1, "name": "Ada" },
  { "id": 2, "name": "Grace" }
]
{"id":1,"name":"Ada"}
{"id":2,"name":"Grace"}

Chaque ligne est minifiée, et ce n’est pas un choix d’esthétique : un document indenté occupe plusieurs lignes, et en NDJSON un saut de ligne signifie enregistrement suivant. L’indentation et le format s’excluent.

La racine doit être un tableau

Le tableau est la liste des enregistrements. Un objet à la racine est un document unique ; le découper en lignes reviendrait à décider que ses clés sont des enregistrements — une supposition que cet outil ne fait pas. La conversion s’arrête.

Les éléments, eux, sont libres : null, 42 et "texte" sont des documents JSON valides, donc des lignes NDJSON valides. Les enregistrements sont généralement des objets, mais rien ici ne l’impose.

Les entiers longs gardent leurs chiffres

[{ "id": 12345678901234567890 }]

ressort avec ses vingt chiffres. Un convertisseur qui passe par un nombre JavaScript écrit 12345678901234567000 à la place, sans rien dire : la valeur change et le fichier reste parfaitement bien formé.

Celui-ci faisait exactement cela. Le défaut a été trouvé en écrivant cette page, puis corrigé ; l’identifiant survit maintenant à l’aller-retour par le NDJSON.

Un tableau vide donne un fichier vide

[] ne produit aucune sortie, et c’est la bonne réponse : le NDJSON n’a pas d’autre façon d’écrire « zéro enregistrement » qu’un fichier vide. Cela signifie qu’un résultat vide et une entrée vide se ressemblent — à savoir avant d’en conclure qu’il ne s’est rien passé.

Confidentiel par conception

Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.

Questions fréquentes

Pourquoi la racine doit-elle être un tableau ?
Parce que le NDJSON est une liste d’enregistrements et que le tableau est cette liste. Un objet à la racine est un document unique, et rien ne permet de décider honnêtement s’il s’agit d’un enregistrement ou d’une collection à découper. Il est refusé plutôt que deviné.
Qu’advient-il d’un saut de ligne à l’intérieur d’une de mes chaînes ?
Il est écrit `\n`, comme JSON l’exige, et reste donc dans la ligne. Cela compte davantage ici qu’ailleurs : en NDJSON, le saut de ligne sépare les enregistrements, et un vrai saut au milieu d’un document couperait un enregistrement en deux moitiés inanalysables.
Mon fichier est un seul tableau d’un million de lignes. Est-ce un problème ?
C’est le cas pour lequel le NDJSON existe, mais la conversion lit quand même tout le tableau en mémoire : l’entrée est un document JSON, et un document doit être complet pour être analysé. Au-delà d’une certaine taille, un outil en flux comme `jq -c ".[]"` est le bon instrument.

Convertisseurs associés