Outils de développement · JSON formateur et validateur
JSON échappements de chaîne expliqués : \n, \uXXXX et caractères de contrôle
· Comment ça marche
json flux de travail du développeur validation
Une nouvelle ligne brute à l'intérieur d'une chaîne JSON n'est pas valide, tout comme une tabulation. Cet article couvre les huit séquences d'échappement, comment fonctionnent les échappements \u et les paires de substitution, et pourquoi un paragraphe collé peut invalider un fichier entier.
Le paragraphe qui a interrompu la charge utile
Le paragraphe qui a interrompu la charge utile : coller un saut de ligne visible dans une description citée insère un caractère de contrôle directement dans la chaîne JSON. La première ligne semble complète, mais le guillemet d'ouverture attend toujours un contenu de chaîne ou un guillemet de fermeture. Lorsque l'analyseur atteint le saut de ligne brut, il s'arrête là car les chaînes JSON ne peuvent pas s'étendre sur les lignes physiques de cette façon. Le texte doit contenir l'échappement à deux caractères `\n` partout où la valeur décodée nécessite une nouvelle ligne.
Les onglets copiés à partir d'un document ou d'une feuille de calcul provoquent la même classe d'échec, même si un éditeur peut les rendre sous forme d'espacement inoffensif. Remplacez une tabulation littérale par `\t`, un retour chariot par `\r` et d'autres contrôles interdits par leurs échappements nommés ou Unicode.
Les huit évasions JSON permettent
Les huit échappements JSON permettent — après une barre oblique inverse, les formes courtes sont `"`, `\\`, `\/`, `\b`, `\f`, `\n`, `\r` et `\t`. Ils représentent un guillemet, une barre oblique inverse, une barre oblique, un espace arrière, un saut de page, un saut de ligne, un retour chariot et une tabulation horizontale. Une barre oblique peut également apparaître sans échappement ; `\/` existe principalement pour la compatibilité avec les contextes qui traitaient autrefois spécialement une séquence de script de fermeture.
Aucune autre lettre ne peut suivre une barre oblique inverse JSON. Les séquences familières des langages de programmation, telles que `\v`, `\0`, `\x41` ou une barre oblique inverse suivie d'une nouvelle ligne physique, ne sont pas valides ici. Utilisez `\u` suivi d'exactement quatre chiffres hexadécimaux lorsqu'il n'existe aucun échappement court. Ce petit vocabulaire fixe permet de conserver les chaînes JSON portables : un consommateur n'a pas besoin de JavaScript, de Python ou de règles d'échappement spécifiques au shell pour déterminer les caractères représentés par un texte valide.
Pourquoi un onglet littéral n'est pas valide mais un é littéral convient
Pourquoi une tabulation littérale n'est pas valide mais un é littéral convient - JSON interdit les points de code non échappés de U+0000 à U+001F à l'intérieur des chaînes. Cette plage contient des onglets, des nouvelles lignes et d'autres contrôles dont les effets invisibles peuvent perturber le cadrage ou l'affichage. La lettre `é` est U+00E9, bien en dehors de la plage de contrôle, donc UTF-8 JSON peut l'inclure directement entre guillemets. Il en va de même pour la plupart des scripts, symboles et emoji.
L'échappement de l'Unicode ordinaire est donc facultatif et non une exigence de propreté. `"café"` et `"caf\u00e9"` décodent avec la même séquence de caractères. Le texte direct est généralement plus facile à lire, tandis que les échappements peuvent faciliter un transport uniquement ASCII ou rendre visible une unité de code spécifique. Les caractères de contrôle sont différents : leur évasion est obligatoire.
Comment fonctionnent les évasions \uXXXX
Comment fonctionnent les échappements `\uXXXX` : le `u` doit être suivi d'exactement quatre chiffres hexadécimaux, en utilisant 0–9 ou A–F dans les deux cas. `\u00E9` représente l'unité de code UTF-16 pour `é` et `\u000A` représente un saut de ligne. Moins de chiffres, des accolades telles que `\u{1F600}` ou une lettre non hexadécimale rendent le JSON invalide, même si un autre langage de programmation accepte cette notation.
Les caractères au-dessus de U+FFFF sont représentés dans ce formulaire d'échappement comme une paire de substitution. L'emoji 😀 peut être écrit sous la forme `\uD83D\uDE00` : les substituts haut et bas se combinent après analyse en une valeur scalaire Unicode. La grammaire JSON peut contenir un échappement de substitution non apparié, mais les encodeurs et les applications en aval peuvent le rejeter ou le remplacer car il n'identifie pas un caractère Unicode complet.
Exemple pratique : échappement d'un chemin Windows et d'un extrait de HTML
Exemple pratique : échappement d'un chemin Windows et d'un extrait de code HTML – le chemin prévu `C:\Temp\report.txt` nécessite que chaque barre oblique inverse soit doublée dans JSON source : `"C:\\Temp\\report.txt"`. Sans doubler, `\T` est un échappement non valide et des séquences telles que `\r` ou `\t` peuvent devenir silencieusement des caractères de contrôle au lieu de séparateurs de chemin. Construisez le JSON à partir de la valeur prévue, sans deviner quelles barres obliques affichées appartiennent déjà à un langage externe.
Un fragment HTML tel que `<a title="Report">Open</a>` peut conserver ses crochets angulaires et sa barre oblique littéralement, mais les guillemets d'attribut doivent devenir `\"` à l'intérieur de la chaîne JSON. Si une nouvelle ligne sépare deux balises, codez-la comme `\n`. Le membre JSON résultant peut être validé et analysé jusqu'au texte HTML d'origine.
Où les évasions sont doublées
Là où les échappements sont doublés, chaque grammaire de texte englobant a sa propre chance d'interpréter les barres obliques inverses. Un document JSON contenant la chaîne décodée `line1\nline2` doit échapper à cette barre oblique inverse, produisant `"line1\\nline2"`. Si ce texte JSON est lui-même stocké sous forme de chaîne JSON, ses guillemets et ses deux barres obliques inverses nécessitent une autre couche d'échappement. Le fouillis apparent enregistre plusieurs représentations, pas une forme étendue spéciale de JSON.
Les shells et les littéraux de langage de programmation ajoutent leurs propres règles de citation avant qu'un analyseur JSON voie l'argument. Diagnostiquez de l'intérieur vers l'extérieur : écrivez d'abord la valeur exacte décodée, codez-la une fois en tant que JSON, puis encodez ce texte JSON complet pour le shell environnant ou la langue source. À chaque limite, inspectez les octets ou les caractères que l'analyseur suivant reçoit réellement.
Ce que cela ne couvre pas
Ce que cela ne couvre pas : les entités HTML telles que `"` et le codage en pourcentage d'URL tel que `%20` sont des transformations distinctes pour des contextes syntaxiques distincts. Un analyseur JSON ne décode aucune des deux formes. La chaîne `"""` contient six caractères littéraux après analyse, pas un guillemet, et `"%20"` contient un signe de pourcentage suivi de deux chiffres, pas un espace. Appliquez ces encodages uniquement lorsque les données transitent vers du HTML ou un composant URL.
Cette discussion ne remplace pas non plus l'encodage de sortie. Un JSON valide reçu d'une source non fiable peut toujours contenir du HTML, du texte de type script ou des séquences de contrôle de terminal sous forme de données de chaîne ordinaires. L'application qui restitue ou exécute ultérieurement une commande doit gérer cette destination en toute sécurité. JSON s'échappe protège la structure JSON ; ce n’est pas une désinfection universelle.
À retenir : échapper à ce que la grammaire interdit, rien de plus
À retenir : échappez à ce que la grammaire interdit, rien de plus : les guillemets doubles, les barres obliques inverses et les points de code en dessous de U+0020 nécessitent une attention particulière à l'intérieur des chaînes JSON. L'Unicode ordinaire peut rester lisible, tandis que `\uXXXX` fournit une alternative exacte à quatre chiffres et que les paires de substitution représentent les caractères supérieurs à U+FFFF. Un diagnostic sur une position apparemment vide identifie souvent une nouvelle ligne littérale, une tabulation ou un autre caractère de contrôle qui doit être remplacé par son échappement textuel.
Comptez les couches d'encodage au lieu de compter les barres obliques à vue. Commencez par la valeur que l'application doit recevoir, codez-la une fois pour JSON et citez ensuite le document résultant pour tout shell externe, fichier source ou deuxième chaîne JSON. Validez le texte présenté à l'analyseur JSON et, lorsque l'exactitude est importante, inspectez ensuite la chaîne décodée.