Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
Vous pouvez convertir NDJSON en XLSX gratuitement et sans compte : déposez le fichier ci-dessus et, une ou deux secondes plus tard, le résultat est prêt à télécharger. La conversion se fait dans votre propre navigateur : le fichier n’est donc jamais téléversé. Cela marche sous Windows, macOS et Linux comme sur iPhone et Android, et continue de marcher si vous coupez le réseau.
Jusqu’à 100 fichiers à la fois. Les formats mélangés ne posent pas de problème.
Ils sont convertis les uns après les autres et reviennent ensemble dans un ZIP.
NDJSON en XLSX
C’est la seule conversion d’un fichier délimité par des sauts de ligne sur ce site qui s’adresse à un être humain. Toutes les autres destinations — CSV pour un chargeur, SQL pour une base de données, Parquet pour un moteur de requête — supposent un logiciel à l’autre bout. Un classeur suppose quelqu’un qui va l’ouvrir, élargir une colonne et trier par date.
Si le fichier va dans une pipeline, c’est la mauvaise page et CSV ou Parquet est la bonne. S’il va à un collègue, un client ou une équipe financière, un classeur économise l’échange qui suit un fichier texte : comment ouvrir ceci, pourquoi les numéros de référence sont faux, quelle colonne est laquelle.
Un fichier délimité n’a pas de types du tout, donc Excel en infère un par colonne quand il ouvre le fichier. Cette inférence est l’endroit où les dégâts familiers se produisent : les zéros initiaux disparaissent des codes de compte et de produit, tout ce qui a forme de date devient une date, et les identifiants au-delà de quinze chiffres perdent leurs derniers chiffres à cause de la virgule flottante.
Les enregistrements d’un fichier NDJSON portent déjà leurs types — une quantité est un nombre, un drapeau est un booléen, une référence exportée en chaîne est une chaîne. Les écrire dans un classeur préserve cette distinction dans le fichier lui-même, donc rien n’est inféré à l’ouverture et un code de 00714 arrive en 00714. Cette seule différence élimine toute une catégorie de conversation de support.
Un champ dont la valeur est un objet devient une colonne par feuille, avec le chemin comme en-tête : un objet `user` imbriqué tenant un nom arrive en colonne appelée `user.name`, portant le type qu’il avait dans l’enregistrement. Les tableaux s’aplatissent par position à la place, donc une liste `tags` de a et b devient `tags.0` et `tags.1`, et les en-têtes sont l’union sur tout le fichier — une liste occasionnellement longue ajoute une colonne pour chaque position qu’elle atteint.
La conséquence est la largeur plutôt que la perte, et la largeur est son propre problème quand le destinataire est une personne. Un enregistrement d’événement avec un bloc `request`, un bloc `user` et un objet `context` peut atteindre trente colonnes à partir de six champs, ce qui est une feuille que personne ne lit. Là où les blocs imbriqués ne sont pas le sujet, les élaguer avec `jq` avant la conversion donne un classeur plus étroit, et les colonnes qui restent sont celles que le lecteur était censé regarder.
Le classeur contient une seule feuille, parce qu’un fichier délimité par des sauts de ligne est un flux unique d’enregistrements sans divisions internes à mapper sur des onglets. Son nom vient du nom du fichier sans l’extension, coupé à 31 caractères, qui est la limite d’un nom de feuille.
Si l’export contient vraiment plusieurs types d’enregistrements — le journal d’événements mêlé décrit plus bas — plusieurs classeurs ou plusieurs conversions de fichiers filtrés produisent un résultat bien plus utilisable qu’une seule feuille avec une colonne discriminante. Scinder le fichier d’abord est une commande d’une ligne contre un format conçu pour être scindé.
Chaque ligne de la source est indépendante et rien n’oblige la deuxième à avoir les clés de la première. La conversion rassemble chaque clé vue n’importe où dans le fichier et en fait une colonne, laissant vides les cellules là où une ligne n’a rien pour elle.
Rien n’est écarté, et un fichier mêlant trois types d’événements produit une feuille dont chaque ligne utilise un tiers des colonnes. Pour une personne qui reçoit cela, cela se lit comme un export cassé même si c’est fidèle. Filtrer la source à un seul type d’événement avant de convertir vaut l’étape supplémentaire, et c’est la différence entre un tableur que quelqu’un utilise et un sur lequel on vous questionne.
Une ligne devient une ligne, donc le compte de lignes est le compte de lignes moins les éventuelles lignes vides. C’est connaissable avant de convertir : `wc -l`, ou le numéro de ligne en bas d’un éditeur.
Cela vaut la peine d’être vérifié contre ce qu’un tableur est un conteneur raisonnable pour. Un classeur de quelques milliers de lignes s’ouvre instantanément et est agréable à manipuler ; plusieurs centaines de milliers de lignes s’ouvrent lentement, filtrent lentement et produisent un fichier que la plupart des systèmes de messagerie rejetteront en pièce jointe. Au-delà, la réponse est d’agréger avant de convertir — un compte par jour, un résumé par client — parce que personne qui reçoit le fichier n’allait lire un million de lignes de toute façon.
Deux vérifications prennent une minute à elles deux. D’abord, comptez les colonnes : une feuille bien plus large que la liste des champs signifie un bloc imbriqué ou un tableau aplati, et il vaut la peine de décider si le destinataire a besoin de ces colonnes. Ensuite, regardez les colonnes d’identifiant et de date et confirmez qu’elles se lisent comme vous l’attendez plutôt que comme des nombres à cinq chiffres ou des codes tronqués.
Et lisez ce qu’il y a vraiment dedans. Un extrait délimité par des sauts de ligne est une sortie de machine, et il contient généralement chaque champ que le système émet — identifiants internes, drapeaux, références de trace, occasionnellement une adresse courriel à laquelle personne ne s’attendait. Un tableur rend tout cela visible d’une manière qu’un fichier de journal ne fait pas, et c’est une bien meilleure chose à découvrir avant que le fichier ne quitte votre organisation qu’après.
Les valeurs sont écrites comme les enregistrements les portaient, sans arrondi, reformatage ou locale appliqué. Un prix de 12,5 est le nombre 12,5 dans la cellule, affiché selon ce que le Excel du destinataire est configuré pour faire, et un horodatage exporté en chaîne ISO reste une chaîne plutôt que de devenir un numéro de série de date.
Ce dernier point est une limite délibérée plutôt qu’un oubli : un horodatage ISO est du texte en JSON, et le transformer en date Excel supposerait un fuseau horaire. Si le destinataire a besoin de dates triables, la voie fiable est une formule ou une étape Texte en colonnes dans le classeur, faite une fois par quelqu’un qui sait dans quel fuseau horaire le journal a été écrit.
Les deux moitiés tournent dans cet onglet de navigateur : le fichier est analysé ligne par ligne et le classeur est assemblé par une bibliothèque chargée à la demande. Rien n’est téléversé, il n’y a ni compte ni file d’attente, et le niveau gratuit accepte jusqu’à 100 Mo avec la mémoire comme vrai plafond.
Pour cette paire la propriété de confidentialité est plus qu’un argument, parce que l’export est par définition sur le point d’être partagé. Le convertir via un service tiers signifie que les données atteignent deux destinataires plutôt qu’un, et un seul d’entre eux était voulu. Le faire localement garde la liste à la personne à qui vous l’envoyez réellement.
Envoyez un CSV quand le destinataire est un système, ou quand la feuille est sortie trop large pour être lue et qu’un fichier délimité va de toute façon dans un script. Envoyez du Parquet quand la destination est un moteur de requête et que les mêmes enregistrements seront lus plusieurs fois. Envoyez le NDJSON lui-même quand le destinataire est un ingénieur, parce que c’est la seule version qui a encore la structure.
Le classeur est la bonne réponse pour exactement une situation et c’est une situation courante : une personne qui a besoin de regarder ces données aujourd’hui, sans rien installer, et qui jugera l’export à la question de savoir si les colonnes ont du sens au premier coup d’œil.
| NDJSON | XLSX | |
|---|---|---|
| Nom complet | Newline-Delimited JSON | Classeur Excel |
| Extension de fichier | .ndjson, .jsonl | .xlsx |
| Type de média | application/x-ndjson | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| Première publication | 2013 | 2007 |
| Publié par | — | Microsoft |
| Spécification | — | ECMA-376 |
| Licence | Standard ouvert | Standard ouvert |
| Situation actuelle | Actuel | Actuel |
| S’ouvre dans un navigateur | Aucun navigateur | Aucun navigateur |
| Envisagé à la place | JSON, CSV | CSV, ODS, Parquet |
Les logiciels habituels ne se recoupent pas : NDJSON s’ouvre dans jq et pandas, XLSX dans Microsoft Excel, LibreOffice Calc et Google Sheets — celui qui reçoit le résultat a donc besoin d’un logiciel de la seconde liste.
Les deux visent des usages différents : NDJSON l’échange entre programmes et la diffusion en continu, XLSX la retouche. Cela mérite d’être pesé avant, car ce qui justifie l’un est souvent ce qui rend l’autre malcommode.
XLSX vient de Microsoft et date de 2007, décrit par ECMA-376. Microsoft Excel, LibreOffice Calc et Google Sheets le lisent.
Non. Cette conversion se fait entièrement dans votre navigateur : le fichier ne quitte donc pas votre appareil. Vous pouvez le vérifier vous-même — ouvrez l’onglet réseau des outils de développement et convertissez quelque chose. Vous verrez la page elle-même et les requêtes de statistiques et de publicité qui financent ce service, et pas une seule qui transporte votre fichier. Le moteur de cette paire précise est SheetJS, un lecteur et générateur de tableurs en JavaScript ; votre navigateur le télécharge une fois puis le garde en cache.
Oui. Pas de compte, pas de filigrane et pas de quota journalier à dépenser : cela tourne sur votre propre machine, vous pouvez donc revenir autant de fois que vous voulez. Le navigateur traite des fichiers jusqu’à 100 Mo, 100 à la fois. SheetJS est téléchargé sur votre machine et s’y exécute, et c’est pourquoi rien n’est compté.
NDJSON et XLSX décrivent le contenu de façons radicalement différentes. La conversion est donc une reconstitution et non une copie : fidèle, mais pas identique octet pour octet. Les objets imbriqués sont aplatis en colonnes. Des données profondément imbriquées y perdent leur forme.
Pas pour la conversion : elle se fait dans le navigateur que vous avez déjà ouvert. Pour ouvrir le résultat, il vous faut ensuite le logiciel avec lequel votre appareil affiche habituellement Excel Workbook.