{ } Formateur JSON
Embellissez et validez du JSON en un clic. Formatez, minifiez et corrigez les erreurs. Gratuit, sans inscription.
Pourquoi Formater, Minifier et Valider ne sont jamais en dsaccord sur ce qui est cass
Un seul analyseur, trois tches. Formater, Minifier et Valider envoient d'abord votre texte au mme analyseur JSON strict intgr votre navigateur, donc tout ce qui choue pour l'un d'eux chouera pour les trois. Ils ne diffrent que par ce qui se passe une fois l'analyse russie.
{"a":1,"b":[2,3]}{
"a": 1,
"b": [
2,
3
]
}| Bouton | Ce qu'il fait une fois votre texte analys avec succs |
|---|---|
| Formater | Rcrit la valeur analyse avec une indentation de deux espaces et un saut de ligne par lment. Le style est fixe, il n'y a pas d'option pour choisir une largeur diffrente ou un style d'accolade. |
| Minifier | Rcrit la mme valeur analyse sans aucun espace blanc, rduisant tout sur une seule ligne. |
| Valider | Laisse votre texte exactement tel que tap et signale le succs, ou le message d'erreur exact de l'analyseur, y compris la position du caractre o l'analyse a chou. |
Tous les trois appliquent des rgles identiques avec aucune flexibilit, car ils s'appuient tous sur la mme implmentation stricte : les noms de proprits et les valeurs de chane ncessitent des guillemets doubles, jamais de guillemets simples ; une virgule de fin aprs le dernier lment d'un objet ou d'un tableau est une erreur fatale, pas un choix de style ; et il n'y a aucune prise en charge des commentaires sous quelque forme que ce soit. C'est la spcification JSON fonctionnant exactement comme prvu, et non cet outil qui est inhabituellement exigeant.
Le foss qui droute les gens est celui qui spare JSON d'un objet littral JavaScript. Un code tel que {name: 'Alice', tags: ['a', 'b'],} s'excute parfaitement dans un script, car JavaScript autorise les cls non entoures de guillemets, les guillemets simples et une virgule de fin. Rien de tout cela n'est du JSON valide. Collez-le ici et Formater, Minifier et Valider le rejetteront tous de la mme manire, car la syntaxe JavaScript valide et le JSON valide s'avrent tre des langages lis mais non identiques.
Le mme analyseur que la console de votre navigateur. Le message d'erreur que Valider vous montre est le message littral qu'un appel JSON.parse() dclencherait dans le code de votre propre application, et non une version paraphrase. Si vous avez dj dchiffr une erreur d'analyse dans une console de navigateur, vous savez dj comment interprter celles que cet outil affiche.
Pourquoi "JSON valide" peut encore tre la mauvaise donne
Valider vrifie la grammaire, pas le sens. Il confirme que vos crochets, guillemets et virgules sont tous au bon endroit. Il n'a aucune ide si un champ requis manque ou si un nombre est arriv sous forme de chane de caractres.
{"a": 1 "b": 2}Expected ',' or '}' after property value in JSON at position 8 (line 1 column 9)Ce message pointe le caractre exact o l'analyseur a abandonn : juste aprs le 1, o il attendait une virgule ou une accolade fermante et a trouv la place le dbut d'une autre proprit. Compter jusqu' cette position dans un diteur de texte, ou utiliser sa commande "aller au caractre", est gnralement plus rapide que de parcourir l'ensemble de la charge utile la recherche d'une virgule manquante l'œil nu.
Ce que Valider ne peut pas vous dire, c'est si les donnes sont correctes une fois analyses. Une rponse peut tre un JSON syntaxiquement parfait et pourtant tre dpourvue d'un champ que votre code attend, contenir un nombre sous forme de chane "42" au lieu du nombre 42, ou stocker la mme date dans trois formats diffrents sur trois enregistrements diffrents. Rien de tout cela n'est un problme de grammaire, donc rien de tout cela ne produit d'erreur ici.
| Valider attrape | Valider n'a pas d'opinion sur |
|---|---|
| Une accolade ou un crochet manquant ou dpareill | Un champ requis qui est simplement absent |
| Une virgule manquante entre deux proprits | Une chane de caractres o un nombre tait attendu |
| Une cl sans guillemets ou avec des guillemets simples | Le mme champ format diffremment selon les enregistrements |
| Une virgule de fin ou un commentaire de code | Des donnes qui sont compltement incohrentes mais individuellement valides |
La syntaxe et la signification sont deux vrifications spares. Cet outil n'effectue que la premire. Pour la seconde, un validateur de schma ou la vrification de type propre votre application est l'outil appropri, car juger de ce qu'une valeur devrait signifier ncessite de savoir quoi vos donnes spcifiques sont censes ressembler.
Pourquoi le bouton Rparer se casse sur les apostrophes l'intrieur des chanes
Rparer ne fait pas la diffrence entre une apostrophe et un guillemet simple. Il remplace chaque guillemet simple de votre texte par un guillemet double. Ainsi, une apostrophe situe l'intrieur d'une valeur de chane (comme l'apostrophe dans "l'arbre") est lue comme un guillemet fermant, ce qui dtruit gnralement le JSON mme qu'il essayait de rparer.
{name: "Alice", active: true, nickname: undefined,}{
"name": "Alice",
"active": true,
"nickname": null
}Derrire ce rsultat se trouve une squence fixe de quatre passes de recherche et remplacement, excutes dans cet ordre chaque fois, que votre texte ait rellement besoin de chacune d'elles ou non :
| tape | Ce qu'elle rcrit |
|---|---|
| 1 | Chaque ' devient un ", partout dans le texte. |
| 2 | Une virgule place juste avant une } ou un ] de fermeture est supprime. |
| 3 | Un mot nu suivi de deux points, comme name:, est entour de guillemets doubles, mais seulement s'il commence par une lettre ou un trait de soulignement. |
| 4 | Le mot littral undefined devient null. |
L'tape un est un remplacement global aveugle, pas un analyseur qui comprend o commence et o finit une chane, et c'est exactement ce qui rend les apostrophes dangereuses. Fournissez-lui {'name': 'c'est un test'} et l'tape un transforme chaque guillemet simple en un guillemet double sans exception, produisant {"name": "c"est un test"}. L'apostrophe de "c'est" est maintenant un caractre de citation qui ferme la chane beaucoup trop tt, laissant un texte est un test" isol qui n'appartient plus rien.
La rparation choue gnralement compltement plutt que de corrompre silencieusement vos donnes. Ce texte rsiduel dtruit presque toujours l'analyse une seconde fois, de sorte que Rparer signale que ce JSON n'a pas pu tre rpar automatiquement et laisse le contenu de votre diteur intact, au lieu de vous rendre un JSON avec une chane discrtement mutile. Le vritable cot est votre temps, pas vos donnes : vous devez toujours encadrer cette valeur la main, car un simple rechercher-remplacer aveugle n'a aucun moyen de distinguer une apostrophe d'un dlimiteur.
Rparer est galement limit dessein. Il ne peut pas insrer une virgule manquante entre deux proprits, ne peut pas supprimer un commentaire de code, ne peut pas convertir un tableau ferm avec le mauvais type de crochet, et ne peut pas remarquer ou rsoudre une cl en double, car aucun de ces problmes ne correspond l'une de ses quatre expressions rgulires. Si Rparer choue, la position exacte de l'erreur indique par Valider est gnralement le chemin le plus rapide vers une rparation manuelle.
Rparer ne fait rien au texte qui s'analyse dj. Cliquez dessus sur un JSON dj valide et il affiche un message de scurit et laisse votre texte exactement comme il tait, formatage compris. Cliquez plutt sur Formater si vous voulez formater diffremment un JSON valide.
Que se passe-t-il lorsque votre JSON a la mme cl deux fois
La dernire occurrence gagne discrtement. La spcification JSON n'interdit pas une cl rpte, et l'analyseur de cet outil la rsout en ne conservant que la valeur de la copie qui apparat en dernier, sans erreur et sans avertissement.
{"name": "Alice", "name": "Bob"}{
"name": "Bob"
}Cliquez sur Valider sur cette entre et il signale un JSON valide, ce qui est techniquement correct : la spcification dit seulement que les implmentations "devraient" traiter les noms comme tant uniques, laissant le comportement rel ce qui effectue l'analyse. L'analyseur de cet outil, le mme que celui intgr au navigateur, conserve la dernire valeur qu'il voit pour une cl rpte et rejette silencieusement toutes les prcdentes. "Alice" a disparu au moment o l'analyse se termine, avec rien dans la sortie pour montrer qu'elle tait jamais l.
Formater et Minifier hritent du mme comportement, puisque les deux analysent votre texte avant de le rcrire. Excutez l'un ou l'autre sur un JSON avec une cl en double et la copie supplmentaire a dj disparu au moment o vous voyez le rsultat. C'est facile manquer lorsque le doublon tait accidentel, une erreur commise lors de la fusion manuelle de deux extraits de JSON, par exemple, plutt que quelque chose que vous vouliez vraiment crire.
La vue en arbre est le moyen le plus rapide d'en reprer un. Puisqu'une cl en double se rduit en une seule entre avant mme d'atteindre l'arbre, une cl que vous vous attendiez voir affiche deux fois mais que vous ne voyez qu'une seule fois est un signal raisonnable pour revenir en arrire et vrifier votre source pour une rptition accidentelle.
Pourquoi un long numro d'identification change aprs avoir cliqu sur Formater
JSON n'a pas de limite sur la taille des entiers, mais le type de nombre de JavaScript en a une. Les nombres au-del de 9 007 199 254 740 991 ne peuvent pas tre stocks exactement, de sorte qu'un identifiant long est silencieusement arrondi la valeur la plus proche qui convient, sans rien pour vous avertir que c'est arriv.
{"id": 900719925474099123}{
"id": 900719925474099100
}Chaque nombre dans un document JSON analys par cet outil, ou par n'importe quel moteur JavaScript, est stock sous la forme d'une valeur virgule flottante de 64 bits. Ce format ne peut reprsenter chaque entier exactement que jusqu' 9 007 199 254 740 991, une limite dfinie par le langage lui-mme. Fournissez-lui un entier plus grand et il l'arrondit la valeur la plus proche que le format peut rellement contenir. Ci-dessus, un ID 18 chiffres se terminant par ...099123 revient en se terminant par ...099100. Avant et aprs sont tous deux des JSON parfaitement valides selon les rgles de la spcification ; seuls les chiffres ont chang, silencieusement.
Cela compte le plus pour les grands identifiants entiers qui apparaissent constamment dans les systmes rels : les identifiants de type snowflake de Discord et Twitter, certaines cls primaires de base de donnes et certaines valeurs financires ou tlmtriques reprsentes comme de grands entiers plutt que comme des chanes. Formater, Minifier et Rparer font tous un aller-retour de vos donnes travers un cycle d'analyse et de rcriture, de sorte que l'un des trois peut corrompre silencieusement un ID de cette faon, et pas seulement Formater.
Considrez les ID au-del de 15 ou 16 chiffres comme dangereux faire passer par cet outil. Si une charge utile contient des identifiants aussi longs, vrifiez les chiffres l'œil nu avant et aprs, ou mieux, travaillez avec une bibliothque JSON conue pour les entiers de prcision arbitraire, ou une qui lit ces champs spcifiques comme des chanes. Un schma qui reprsente les grands ID comme des chanes entoures de guillemets ne heurte jamais cette frontire du tout, car la limite de prcision ne s'applique qu'au type numrique.
Pourquoi le formatage peut rorganiser silencieusement les cls de votre objet
Les cls qui ressemblent des nombres sautent au dbut. Toute cl telle que "2" ou "10" est dplace avant chaque cl de chane ordinaire et trie par ordre numrique croissant, peu importe o vous l'avez crite l'origine.
{"b": 1, "10": 2, "a": 3, "2": 4}{
"2": 4,
"10": 2,
"b": 1,
"a": 3
}Regardez de prs ce rsultat : "2" et "10" se dplacent tout au dbut, avant "b" mme si "b" a t crit en premier, et ils atterrissent par ordre numrique, 2 avant 10, pas dans l'ordre o ils sont apparus dans la source. Les cls de chane ordinaires "b" et "a" conservent leur ordre relatif d'origine derrire celles d'apparence numrique.
Il s'agit d'un comportement standard dfini par la spcification du langage JavaScript sur la faon dont les cls d'objet sont numres, et non d'une bizarrerie spcifique cet outil. Toute cl qui s'analyse comme un entier non ngatif, sans zro non significatif, sans point dcimal, sans signe, est traite comme un index de type tableau des fins de classement et trie numriquement avant tout le reste. C'est facile manquer jusqu' ce que cela arrive des donnes dont vous ne vous attendiez pas ce qu'elles changent de forme du tout.
L o cela pose rellement problme : le JSON o les cls d'objet s'avrent tre des chanes numriques utilises comme index, des ID, une structure de type tableau reprsente comme un objet, ou des lignes de tableur classes par numro de ligne. Si vos donnes n'utilisent jamais de cls d'apparence numrique, le formatage ne rorganise jamais rien et l'ordre d'insertion est prserv exactement tel qu'il a t crit.
Pourquoi vous ne devriez jamais archiver du JSON minifi dans Git
Un fichier minifi transforme chaque changement en une diffrence sur toute la ligne. tant donn que l'ensemble du fichier est techniquement une seule ligne, la modification d'une seule valeur n'importe o l'intrieur fait qu'un outil de diffrence signale que la ligne entire a chang, cachant ce qui s'est rellement dplac.
{"id":42,"active":true,"tag":"draft"}{
"id": 42,
"active": true,
"tag": "draft"
}Le JSON minifi existe pour les machines. Supprimer chaque espace et saut de ligne rduit le nombre rel d'octets d'une charge utile qui est envoye rptition sur un rseau, ce qui compte pour une rponse API publique servie des millions de fois et compte peine pour un fichier de configuration lu une fois au dmarrage. Le JSON bien format existe pour les gens : une proprit par ligne avec une indentation cohrente est ce qui rend rellement un fichier de configuration ou une rponse API lisible.
Le cot du contrle de version lorsqu'on fait les choses l'envers est facile sous-estimer. Stockez la version minifie de cet objet dans Git et changez seulement "tag": "draft" en "tag": "final", et un examinateur verra toute la ligne marque comme ayant chang, car tout le fichier est une seule ligne. Ils ne peuvent pas dire d'aprs la seule diffrence si un seul champ a chang ou si toute la structure a t rcrite. Stockez plutt la version formate et la mme modification produit une diffrence d'une ligne pointant directement sur "tag".
Le comportement de rorganisation des cls abord prcdemment aggrave ce problme. Deux outils qui formatent les mmes donnes sous-jacentes de manire lgrement diffrente, ou un objet qui contient des cls numriques sous forme de chanes, peuvent produire une diffrence qui semble alarmante mme si les donnes sous-jacentes n'ont pas chang de manire significative.
Gardez une source formate, gnrez une version minifie. Modifier directement du JSON minifi, puis essayer de revoir les diffrences, ncessite de lutter contre le format chaque tape. Gardez la version lisible sous contrle de version et produisez la copie minifie en tant qu'tape de gnration la place.
Comment trouver un mauvais champ dans une rponse profondment imbrique
La vue en arbre transforme le JSON imbriqu en un plan rductible. Chaque objet et tableau peut tre pli indpendamment et porte une tiquette indiquant combien de cls ou d'lments il contient, vous pouvez donc plier ce que vous comprenez dj et vous concentrer sur la seule branche que vous tes en train d'examiner.
L'arbre analyse votre JSON de la mme manire stricte que Valider, il a donc besoin d'une entre syntaxiquement correcte pour fonctionner du tout. Cliquez dessus sur un JSON cass et vous obtiendrez la mme erreur d'analyseur que Valider montrerait, et non un arbre partiel construit partir de ce qui a pu tre analys.
| Type de valeur | Comment il apparat dans le plan |
|---|---|
| Chane | Affich en vert, entre guillemets, tiquet string |
| Nombre | Affich en bleu, sans guillemets, tiquet number |
| Boolen | Affich en ambre, tiquet boolean |
| Nul | Affich en gris italique, tiquet null |
Les branches d'objet et de tableau portent leur propre tiquette au lieu d'un nom de type : un objet montre combien de cls il possde, un tableau montre combien d'lments, et les deux comptages se mettent jour chaque niveau d'imbrication. Coller {"user":{"id":1,"tags":["a","b"]}} donne un objet racine contenant 1 cl, qui s'tend en un objet contenant 2 cls, dont l'une est un tableau contenant 2 lments. Chacune de ces parties peut tre replie elle-mme, de sorte qu'une rponse avec des dizaines d'objets imbriqus ne vous oblige pas les faire dfiler tous en mme temps.
Les incompatibilits de type ressortent visuellement dans un arbre alors qu'elles se cachent dans du texte brut. Un nombre entre guillemets qui aurait d tre numrique, ou un espace nul l o vous attendiez une chane vide, est facile oublier dans un mur de JSON format mais ressort immdiatement une fois cod par couleur selon le type dans un plan dvelopp.
Six faons dont les gens utilisent rellement cet outil
Dboguer une rponse API qui n'a pas pu tre analyse
Collez le corps de la rponse et cliquez d'abord sur Valider. La position exacte du caractre signale est gnralement suffisante pour aller directement la section mal forme, une virgule manquante ou un caractre non chapp, plutt que de lire toute la charge utile l'œil nu.
Nettoyer un objet littral copi depuis du code JavaScript
Le code copi d'un fichier d'application utilise souvent des guillemets simples et omet entirement de mettre les cls entre guillemets, tous deux valides en JavaScript, aucun des deux n'tant valide en JSON. Rparer gre les deux automatiquement pour les cas simples. Excutez Valider ensuite pour confirmer que la rparation a rellement produit un JSON analysable au lieu de supposer que cela a fonctionn.
Rduire un fichier de configuration avant son dploiement
Un fichier modifi la main bnficie de la lisibilit de Formater. Ce mme fichier regroup pour la production bnficie de l'empreinte plus petite de Minifier. Gardez une version source formate et gnrez la copie minifie au moment de la construction plutt que de modifier manuellement un fichier illisible d'une seule ligne chaque fois qu'une valeur doit changer.
Examiner une charge utile inconnue avant d'crire un type pour elle
Avant d'crire un analyseur ou une dfinition de type par rapport une nouvelle rponse API, passez un chantillon travers la vue en arbre pour voir sa forme relle : quels champs sont des objets par rapport aux tableaux, quelles valeurs sont parfois nulles. Un enregistrement aberrant, un champ qui est une chane partout sauf dans un objet o c'est un nombre, ressort dans un arbre dvelopp beaucoup plus vite qu'il ne le fait dans un mur de texte minifi.
Archiver des diffrences lisibles au lieu de bruits de ligne entire
Gardez les fixtures JSON et les fichiers de configuration formats plutt que minifis avant qu'ils n'entrent dans le contrle de version. Un fichier avec une proprit par ligne produit une diffrence qui montre exactement quel champ a chang ; un fichier minifi montre l'ensemble du fichier comme modifi ds qu'une seule valeur change.
Protéger les grands champs d'ID contre les arrondis silencieux
Si une charge utile transporte des identifiants de type snowflake ou de grandes cls de base de donnes sous forme de nombres bruts, ne faites pas un aller-retour de ce champ spcifique travers Formater, Minifier ou Rparer sans vrifier les chiffres par la suite. L o vous contrlez le schma, le stockage de l'ID sous forme de chane entre guillemets contourne entirement la limite de prcision, car la limite de 2^53 ne s'applique qu'au type numrique de JSON.
Questions Fréquentes
Outils Associés
🔒 100 % Privé et Sécurisé
Tout le traitement du JSON s'effectue localement dans votre navigateur - vos données ne sont jamais envoyées. Sécurisé pour les clés d'API, les configurations et les données sensibles.