Un client m'a envoyé une exportation de 12 000 lignes pour les charger dans une base de données de transfert. Je l'ai converti, importé et expédié. Deux jours plus tard, leur prospect de l'OPS a demandé pourquoi quelques centaines de clients du New Jersey avaient des codes postaux à quatre chiffres.
07102 était devenu 7102. Chaque zip commençant par un zéro, sur tout le fichier, amputé tranquillement. Pas par un bogue - par une fonctionnalité. Inférence de type regardée 07102, j'ai vu quelque chose qui correspondait à "un nombre", et l'a utilement converti en un seul. Les zéros principaux ne sont pas une chose que les nombres ont.
j'ai construit le Convertisseur CSV en JSON sur toolz.dev, et il le fait aussi. Je vais vous montrer exactement où, car un convertisseur qui modifie silencieusement vos données est plus dangereux qu'un qui échoue.
tl;dr : le Convertisseur CSV en JSON Transforme un CSV en un tableau d'objets, en utilisant la première ligne comme clés, s'exécutant entièrement dans votre navigateur. il Inferme toujours les types Et vous ne pouvez pas désactiver cela dans l'interface utilisateur, ce qui signifie
07102→7102,1250.50→1250.5, Cellules vides →null, ettrue/false→ Booléens. De gros entiers au-delà de 2 ⁵ ³ de chaînes de stockage, ce qui permet d'enregistrer vos identifiants Twitter. virgule Dans l'interface, les CSV au point de vue d'un excel européen n'analyseront donc pas. Les en-têtes en double sont une erreur difficile plutôt qu'une écrasement silencieux - celui-ci est une véritable amélioration par rapport à la plupart des analyseurs. Vérifiez la sortie avant d'importer et utilisez le Formateur JSON pour le regarder.
Qu'est-ce que ce convertisseur fait réellement à vos données ?
Chaque valeur d'un CSV est du texte. 29 est le caractère 2 et 9. JSON a des types réels, donc un convertisseur doit décider : 29 Le nombre 29 ou la chaîne "29" ? Il n'y a pas de bonne réponse en général, et chaque analyse de l'analyseur CSV.
Celui-ci devine. Toujours. Voici l'ensemble de règles complet, directement à partir du code et vérifié en l'exécutant :
| Valeur CSV | Sortie JSON | taper à la |
|---|---|---|
29 |
29 |
chiffre |
07102 |
7102 |
Nombre - zéro disparu |
1250.50 |
1250.5 |
Nombre - centime disparu |
true / TRUE |
true |
booléen |
null / NIL |
null |
invalide |
| (cellule vide) | null |
invalide |
9007199254740993 |
"9007199254740993" |
file |
1e3 |
1000 |
chiffre |
+5 |
"+5" |
file |
.5 |
".5" |
file |
NO |
"NO" |
file |
+8801712345678 |
"+8801712345678" |
file |
2024-01-05 |
"2024-01-05" |
file |
Quelques-uns d'entre eux méritent un examen plus approfondi, car le modèle n'est pas évident.
Le nombre de regex est strict, et c'est une charge. ça correspond ^-?\d+$ Et rien d'autre. C'est pourquoi +5 et .5 Survivez sous forme de cordes - aucun avantage, aucun point décimal nu. C'est aussi pourquoi +8801712345678 — Un numéro de téléphone bangladais, et je teste avec le mien — passe intact. dépouillé ça + Et vous le perdriez à cause de la conversion numérique. Ainsi, la rigueur de la regex protège accidentellement les numéros de téléphone et uniquement les numéros de téléphone qui conservaient leur code de pays.
Les gros entiers sont gérés correctement, ce qui m'a surpris. Tout ce qui n'est pas le cas de la plage entière de sécurité de JavaScript (±2⁵³−1) est délibérément conservé comme une chaîne plutôt que converti et mutilé. Les identifiants de flocon de neige, les identifiants Twitter et les clés de base de données à 19 chiffres survivent. Appel de convertisseurs les plus naïfs parseInt et te donner 9007199254740992 où tu avais ...93. Celui-ci vérifie en premier le lien.
NO Reste une chaîne — qui esquive tranquillement le problème de Norvège qui consomme des fichiers YAML. Format différent, analyseur différent, mais à noter : le code du pays NO est un coup de monnaie pour savoir comment un analyseur de configuration le traite, et ici, il est sûr.
Vide signifie NULL, pas de chaîne vide. Et voici un petit bogue de documentation que j'ai trouvé en écrivant ceci : le panneau "Comment cela fonctionne" dit l'outil. "Les valeurs vides sont conservées sous forme de chaînes vides dans la sortie JSON." Ils ne le sont pas. inferType('') retours null. Le texte de l'interface utilisateur est erroné, le code est ce qui est livré. Je répare la copie.
Pourquoi 07102 devient-il 7102, et que dois-je faire à ce sujet ?
Parce qu'un code postal n'est pas un numéro et un ordinateur ne peut pas le dire.
07102 Correspond parfaitement aux "chiffres", éventuellement négatifs. parseInt("07102", 10) est 7102. Le premier zéro porté sens - il Était Les données — et les chiffres n'ont aucun moyen de les conserver. La même chose arrive à :
- codes postaux:
07102,01950, n'importe quoi en Nouvelle-Angleterre ou au New Jersey - Produits SKU:
00451 - Numéros de téléphone sans plus:
0171... - Codes bancaires/routage, ID des employés, Tout identifiant rembourré
- de l'argent:
1250.50→1250.5, et2100.00→2100
Ce dernier vaut la peine d'être assis. 1250.50 et 1250.5 sont le même nombre et une chaîne différente. Si vous rendez la devise en aval, $1250.5 va apparaître dans une interface utilisateur quelque part, et quelqu'un va déposer un bogue qui prend une heure pour retracer une conversion CSV trois semaines plus tôt. (La vraie leçon qui s'y trouve est de stocker de l'argent sous forme de centimes de nombre entier ou de chaîne décimale, jamais de flotteur, mais c'est un combat pour un article différent.)
À l'heure actuelle, dans cet outil, il y a Pas de bascule pour désactiver l'inférence. La fonction sous-jacente prend un inferTypes L'option et l'interface utilisateur ne le passe jamais, donc c'est activé, de façon permanente, par défaut. C'est un écart, et c'est le top élément de ma liste pour cet outil.
Jusqu'à ce qu'il soit expédié, vos options :
- Regardez la sortie. Sérieusement, c'est pourquoi l'outil affiche JSON dans un volet au lieu de simplement le télécharger. Scannez vos colonnes d'identification. Cela prend dix secondes et c'est comme ça que j'aurais dû saisir les codes postaux.
- Devis-proof le vers l'amont. Citation dans le CSV n'aidera pas - les citations de bandes d'analyse et à ce moment- en déduit, donc
"07102"devient encore7102. Au lieu de cela, rendez la valeur non numérique à la source : exporter en tant queZIP-07102, ou ajoutez une colonne de préfixe dans la feuille de calcul. - post-processus. Convertir, puis corrigez les colonnes que vous connaissez sont des identifiants :
data.forEach(r => r.zip = String(r.zip).padStart(5, '0')). Laid, mais honnête et vérifiable. - Utilisez un véritable analyseur pour les vrais pipelines. Pour tout ce qui est programmé ou automatisé,
csv-parseou papa analyser dans le nœud aveccast: falseva le faire correctement. Un outil de navigateur est pour le seul.
Qu'est-ce que l'analyseur obtient correctement ?
J'ai été durs, alors voici l'autre moitié - et une partie de cela est vraiment meilleure que ce que vous trouverez ailleurs.
Les en-têtes en double sont une erreur difficile. Nourrissez-le a,b,a Et il refuse : Duplicate headers found: a. La plupart des analyseurs laissent silencieusement gagner la dernière colonne, de sorte qu'une colonne de données s'annule sans un mot. Échec fort, voici le bon appel - vous ne pouvez pas avoir deux touches portant le même nom dans un objet JSON, et prétendre perdre des données.
Les champs cités sont traités correctement, par RFC 4180. Les virgules à l'intérieur restent sur place ; "" devient littéral ". Les exemples de données sont livrés avec "Mike, Jr." spécifiquement pour le prouver.
Les nouvelles lignes à l'intérieur des champs cotés fonctionnent. C'est là que la division CSV roulée à la main meurt généralement - quelqu'un se sépare \n et un champ d'adresses multilignes fait exploser l'ensemble du fichier. Le diviseur de lignes suit l'état de la citation caractère par caractère, donc "line1\nline2" Reste un champ.
Les lignes vides sont ignorées, donc les nouvelles lignes de suivi et la ligne vide égarée quitte à la fin ne produisent pas d'objets fantômes.
Les lignes en lambeaux ne plantent pas. Trop peu de champs et les clés manquantes reviennent null; trop de nombres et les extras après votre nombre d'en-têtes sont supprimés en silence. (Cette dernière partie que j'appellerais débattue plutôt que correcte - un avertissement serait préférable à une défaite silencieuse.)
Un écart RFC à connaître : Les valeurs sont rognées, y compris les devis intérieurs. RFC 4180 §2.4 indique que les espaces font partie du domaine et ne doivent pas être ignorés, donc " John " devrait être " John ". Cet outil vous donne "John". C'est une commodité délibérée - 99 % du temps à la fin de l'espace blanc dans un CSV est un accident que vous voulez avoir - mais si vous êtes un simple fait d'aller au-delà des données, c'est une étape avec perte et la spécification n'est pas de mon côté.
Pourquoi mon analyseur CSV n'est-il pas là ?
Parce que l'interface est uniquement par des virgules, et cela attrape toutes les exportations européennes.
Excel dans un environnement local qui utilise une virgule comme séparateur décimal écrit CSV avec point-virgule comme délimiteur de champ. Parfaitement valable, extrêmement courant, et cet outil ne l'analysera pas. coller a;b et vous obtenez une seule clé littéralement nommée a;b avec la valeur "1;2". Il n'y a pas d'erreur - il ne produit qu'une seule colonne inutile, ce qui est pire que de se tromper.
La fonction d'analyse accepte un delimiter option. L'interface utilisateur ne l'expose jamais. Même classe d'écart que la bascule d'inférence.
Solutions de contournement :
- Rechercher et remplacer
;→,Dans un éditeur de texte d'abord — Safe ne Si aucun champ ne contient une virgule dans les guillemets. - au sujet de -Exportation d'Excel Avec "CSV UTF-8 (délimitée par des virgules)".
- Utilisez le Visionneuse CSV Au lieu de cela, il délimite la détection en délimitant la cohérence du nombre de colonnes entre les délimiteurs candidats, de sorte qu'il lit votre fichier de point-virgule. Il ne se convertira pas en JSON, mais il vous montrera ce que vous avez.
Les onglets ont le même problème. Le tuyau est délimité.
Comment convertir CSV en JSON sur Toolz.dev ?
Étape 1 : Ouvrir le convertisseur
aller au Convertisseur CSV en JSON. Des exemples de données sont chargés et déjà convertis, vous pouvez donc voir la forme immédiatement.
Étape 2 : Collez votre CSV
Collez dans le volet gauche. il y a Pas de téléchargement de fichiers — C'est une zone de texte, alors ouvrez votre .csv dans un éditeur de texte et copiez-le. Pour quelques milliers de lignes, c'est bien. Pour une exportation de 200 Mo, utilisez un véritable analyseur.
Votre première ligne doit être en-têtes et vous avez besoin d'au moins une ligne de données. Une seule ligne revient CSV must have at least a header row and one data row.
Étape 3 : Convertir
choquer Convertir en JSON. Vous obtenez un tableau d'objets, un par ligne, des clés de votre en-tête, en retrait de deux espaces. Le nombre de lignes apparaît au-dessus de la sortie - vérifiez-le par rapport à ce que vous attendiez, car c'est le test de santé mentale le moins cher possible.
Étape 4 : Lisez la sortie avant de lui faire confiance
L'étape que tout le monde saute et j'ai sauté une fois. Regardez vos colonnes d'identification. Regardez vos colonnes d'argent. Si un code postal apparaît non cité dans le JSON, c'est un numéro maintenant.
Étape 5 : Copiez ou téléchargez
truquer Pour le presse-papiers, Télécharger JSON pour un data.json fichier.
Quand ne dois-je pas utiliser un convertisseur de navigateur ?
Être honnête sur la limite :
| situation | manier |
|---|---|
| Unique, quelques milliers de lignes | CSV à JSON |
| Données sensibles que vous ne pouvez pas télécharger | Ceci - il ne quitte jamais votre navigateur |
| Tout ce qui est planifié ou automatisé | csv-parse / Analyse de papa dans le nœud |
| Délimité par un point-virgule ou un onglet | Visionneuse CSV, ou corriger le délimiteur |
| Codes postaux, SKU, ID rembourrés | Tout ce qui contient cast: false |
| Sortie imbriquée à partir d'en-têtes en pointillés | Un script — Cela ne produit que des objets plats |
| 100 000 + lignes | Parseur de streaming ; le navigateur contient tout en mémoire |
| Aller dans l'autre sens | JSON vers CSV |
Cette "sortie imbriquée" vaut la peine d'être indiquée, car les anciennes versions de ce guide ont revendiqué le contraire : des en-têtes comme user.name et address.city faire décorer non devenir des objets imbriqués. Vous obtenez un objet plat avec une clé littéralement nommée "user.name". Il n'y a pas d'extension de notation par points, pas de transformation d'en-tête, pas de conversion de CamelCase. Objets plats, clés exactement comme tapées dans votre ligne d'en-tête - espaces, hachages et tout. un en-tête de Order # vous donne une clé de "Order #", qui est légal JSON et Javascript maladroit (row["Order #"]).
La raison pour laquelle j'ai atteint cet outil est la même raison que le reste du site : vos données ne vont nulle part. Si vous convertissez une exportation de clients avec de vrais noms et e-mails, ce n'est pas une mince affaire - la coller dans un convertisseur côté serveur signifie remettre à un tiers un fichier de données personnelles, ce qui est une conversation avec votre DPD que vous préférez ne pas avoir. Ici, l'analyse s'exécute dans votre onglet. Désactivez votre Wi-Fi et cela fonctionne toujours.
Questions fréquentes
Pourquoi mon code postal a-t-il perdu son premier zéro ?
Parce que l'inférence de type l'a converti en un nombre et que les nombres ne peuvent pas stocker les zéros non décalés. 07102 Correspond au modèle "chiffres uniquement", de sorte qu'il devient 7102. Cela affecte les codes postaux, les SKU rembourrés, les ID des employés et tout identifiant qui se trouve être tous les chiffres. Le citer dans le CSV n'aidera pas - les devis sont dépouillés avant les courses d'inférence. Vérifiez vos colonnes d'ID dans la sortie ou préfixez les valeurs à la source pour les rendre non numériques.
Puis-je désactiver la conversion automatique de type ?
Pas dans l'interface. La fonction sous-jacente prend en charge un inferTypes Option, mais l'interface utilisateur ne l'expose pas, donc l'inférence est toujours activée. Si vous avez besoin de chaînes brutes, utilisez un analyseur de bibliothèque comme Papa Parse ou csv-parse Avec la diffusion désactivée ou corrigez les colonnes affectées après la conversion.
Prend-il en charge les fichiers délimités par le point-virgule ou les tabulations ?
Non : l'interface est uniquement par des virgules. Un fichier point-virgule analyse dans une colonne absurde plutôt que d'erreur, alors surveillez-le. Remplacez les points-virgules par des virgules en premier (sans échec uniquement si aucun champ entre guillemets ne contient une virgule), réexportez d'Excel en tant que délimité par des virgules ou utilisez la visionneuse CSV, qui détecte automatiquement les délimitations.
Qu'arrive-t-il aux cellules vides ?
ils deviennent null, pas de chaînes vides. Notez que le panneau "Comment il fonctionne" de l'outil est le contraire. Le texte du panneau est erroné et le code est correct. Cellules contenant le texte littéral null ou nil devenir aussi null.
Puis-je convertir un CSV sans ligne d'en-tête ?
non . La première ligne est toujours traitée comme l'en-tête, et un fichier avec une seule ligne renvoie une erreur indiquant qu'il a besoin d'un en-tête plus d'au moins une ligne de données. Si vos données ne contiennent pas d'en-tête, ajoutez-en un dans un éditeur de texte avant de coller.
Gère-t-il des virgules et des sauts de ligne dans les champs entre guillemets ?
Oui, les deux. L'analyseur suit l'état de la citation caractère par caractère, donc un champ comme "Mike, Jr." conserve sa virgule, et un champ entre guillemets contenant une nouvelle ligne reste une valeur unique au lieu de diviser la ligne. Citations doubles échappées ("") Devenir un seul devis littéral, selon la RFC 4180.
Que se passe-t-il avec les noms de colonnes en double ?
Il refuse de convertir et vous indique quel en-tête est dupliqué. C'est délibéré - un objet JSON ne peut pas avoir deux clés identiques, de sorte que l'alternative est de laisser tomber une colonne en silence. De nombreux analyseurs font exactement cela ; renommez les colonnes et convertissez-les à nouveau.
Y a-t-il une limite de ligne ?
Aucune limite imposée, mais tout s'exécute dans la mémoire de votre navigateur : le texte CSV, le tableau analysé et la chaîne JSON formatée existent tous à la fois. Quelques milliers de lignes sont confortables, le nombre de lignes à six chiffres rendra la tabulation difficile. Pour les fichiers aussi volumineux, utilisez plutôt un analyseur de streaming dans Node.
Mes données sont-elles téléchargées quelque part ?
non L'analyse se produit dans votre navigateur et votre CSV n'est jamais transmis, ce qui le rend sûr pour les exportations des clients et autres données que vous ne pouvez pas légitimement coller dans un outil côté serveur. Vérifiez-le de manière simple : ouvrez DevTools, regardez l'onglet Réseau lors de la conversion, ou désactivez simplement votre Wi-Fi et voyez qu'il fonctionne toujours.
la version courte
CSV en JSON ressemble à la conversion la plus ennuyeuse de l'informatique et ce n'est pas le cas, car au moment où un analyseur décide quelles sont vos chaînes hargneux, cela peut être faux d'une manière qui ne s'annonce pas. Aucune erreur, aucun avertissement, juste des codes postaux à quatre chiffres qui refait surface deux jours plus tard.
Donc : convertissez, puis Lire la sortie. Vérifiez les colonnes qui sont des identifiants prétendant être des nombres. S'ils sont sortis non cités, vous avez perdu quelque chose. Cette habitude coûte dix secondes et m'aurait évité un e-mail embarrassant.
le Convertisseur CSV en JSON est bon au travail unique - champs cités, nouvelles lignes intégrées, identifiants à gros nombres entiers et défaillances bruyantes sur les en-têtes en double, le tout sans que vos données ne quittent le navigateur. Il n'est que virgule, il en déduit toujours les types et produit des objets plats. Maintenant, vous savez tous les trois avant qu'ils ne mordent.
Aller dans l'autre sens : JSON vers CSV. Pour inspecter un CSV désordonné en premier : Visionneuse CSV. Pour vérifier la sortie : Formateur JSON. Et si vos données sont en tête d'un fichier de configuration, JSON vers Yaml. Le tour plus large est dans le Guide des outils JSON et le Guide des outils de codage.

