Un validateur JSON répond à une seule question : un analyseur acceptera-t-il ce document. Cela paraît étroit et c'est la question qui compte, car tous les consommateurs en aval de vous, dans tous les langages, appliquent la même grammaire. Si cela s'analyse ici, cela s'analysera là-bas.
L'utile n'est pas le oui ou le non mais l'emplacement. Les moteurs JavaScript modernes ont changé leur façon de signaler les erreurs de syntaxe : au lieu d'un décalage en caractères, les navigateurs récents renvoient une fenêtre citée du source autour du problème. C'est plus agréable à lire et nettement plus difficile à convertir en position de curseur, ce qui explique pourquoi certains validateurs se sont mis à dire simplement « jeton inattendu » sans aucune ligne. Nous localisons l'échec par bissection, en réduisant le document jusqu'au plus petit fragment fautif, afin que l'erreur désigne encore une ligne et une colonne exploitables.
La plupart des échecs réels viennent d'un petit ensemble de causes, et les reconnaître évite la recherche. Les virgules après le dernier élément d'un objet ou d'un tableau sont légales en JavaScript et interdites en JSON. Les guillemets simples autour des chaînes sont de même une habitude JavaScript que JSON rejette. Les clés d'objet sans guillemets sont valides dans un littéral JavaScript et pas en JSON. Les commentaires, sous l'une ou l'autre forme, ne font pas partie du format, aussi raisonnables qu'ils paraissent dans un fichier de configuration. Et un NaN ou un Infinity nu, que JavaScript produit volontiers, n'a aucune représentation JSON.
L'encodage produit les échecs déroutants. Une marque d'ordre des octets en tête de fichier est invisible dans la plupart des éditeurs et fait que le premier caractère n'est pas l'accolade attendue. Un texte collé depuis un traitement de texte peut porter des guillemets courbes qui ressemblent presque aux guillemets droits sans être le même caractère. Un document qui paraît parfait et refuse de s'analyser en position zéro est presque toujours l'un de ces deux cas.
La validité n'est pas la justesse. Un document peut s'analyser proprement et rester faux pour son usage : un champ obligatoire manquant, un nombre là où une chaîne était attendue, un tableau là où le consommateur voulait un objet. C'est la validation de schéma, une question distincte et plus lourde, et un validateur qui ne vérifie que la grammaire ne vous en dira rien. Savoir laquelle des deux vous est nécessaire fait gagner du temps.
Comme pour tous les outils d'ici, le document est analysé dans votre navigateur et n'est jamais transmis. Cela mérite d'être noté précisément parce que les documents que l'on valide sont ceux qui échouent en production, et ceux-là sont pleins d'identifiants réels appartenant à des personnes réelles.