Entwicklertools · JSON Formatierer und Validator
Gültig JSON vs. gültig gegen ein Schema: zwei Bedeutungen von „gültig“
· Hintergrund
json Standards Validierung
Ein Validator, der sagt, dass Ihr JSON gültig ist, bedeutet nur, dass er analysiert. Dieser Beitrag erklärt die Gültigkeitsebenen (Syntax, Struktur, Semantik) und warum das JSON-Schema für alles existiert, was über die Grammatik hinausgeht.
Gültig und immer noch abgelehnt
Eine Anfrage kann einwandfrei JSON sein und dennoch für eine API nicht akzeptabel sein. `{"username":"nori","plan":"gold"}` verfügt über ausgewogene Trennzeichen, Namen in Anführungszeichen und zulässige Werte. Dennoch kann ein Dienst im aktuellen Status eine E-Mail erfordern, den Plannamen ablehnen oder die Kontoerstellung verbieten. Der Parser und die Anwendung beantworten unterschiedliche Fragen, sodass beide Ergebnisse korrekt sein können.
ToolAcre beantwortet nur die erste Frage: Kann dieser Text innerhalb seiner Eingabegrenzen als strikt JSON geparst werden? Es lädt kein Schema, überprüft keine erforderlichen Eigenschaften, überprüft keine Formate, kontaktiert keine Datenbank und bewertet keine Geschäftsregeln. Wenn das Tool „Gültig“ anzeigt, lesen Sie dies als „wohlgeformte JSON-Syntax“ und nicht als Genehmigung des Systems, das den Wert verbraucht.
Ebene eins: Wohlgeformte Syntax Die
-Syntaxvalidierung überprüft die JSON-Grammatik: einen Wert der obersten Ebene, korrekt gepaarte Container, Objektnamen in Anführungszeichen, gültige Kommas und Doppelpunkte, zulässige Zeichenfolgen, zulässige Zahlen und genaue Literale. Es lehnt `NaN` und `Infinity`, Kommentare, nachgestellte Kommas und Zeichenfolgen in einfachen Anführungszeichen ab. Es akzeptiert jede grammatikalisch gültige Form, einschließlich einer einzelnen Zahl oder eines Objekts mit unbekannten Feldern.
Die fehlerhafte Quelle weist einen Textfehlerpunkt auf, sodass ToolAcre eine Zeile und eine Spalte für das erste unmögliche Zeichen melden kann. Ein fehlendes Komma kann dazu führen, dass das nächste Zitat gemeldet wird; Ein abschließendes Komma kann dazu führen, dass das schließende Trennzeichen gemeldet wird. Das Korrigieren der Syntax erstellt einen analysierbaren Wert, stellt jedoch nicht sicher, dass der Wert die von einem anderen Programm erwartete Form oder Bedeutung hat.
Ebene zwei: die Form
Die Formvalidierung fragt, ob der analysierte Wert mit einem deklarierten Vertrag übereinstimmt. Ein Benutzerschema erfordert möglicherweise `email`, beschränkt `age` auf eine Ganzzahl von mindestens 18, beschränkt `tier` auf `free` oder `pro` und lässt unbekannte Eigenschaften nicht zu. `{"email":false,"tier":"gold"}` ist eine gültige JSON-Syntax, verstößt jedoch gegen diese Strukturregeln, da die Werttypen und zulässigen Auswahlmöglichkeiten falsch sind.
JSON Schema ist eine Möglichkeit, solche Einschränkungen auszudrücken, aber ToolAcre führt es nicht aus. Ein Schemavalidator meldet normalerweise einen Instanzpfad wie `/tier`, ein Schlüsselwort wie `enum` und eine erklärende Nachricht anstelle eines Parser-Caret. Behalten Sie die Schemaversion und den API-Vertrag neben der Nutzlast bei, wenn Sie diese Ebene diagnostizieren. Durch das Ändern der Interpunktion wird ein korrekt analysierter Wert mit falscher Form nicht repariert.
Ebene drei: Bedeutung
Die Bedeutung hängt von Fakten und Regeln ab, die über die statische Form des Dokuments hinausgehen. Ein `accountId` kann das richtige Zeichenfolgenmuster haben, während kein Konto benannt wird. Ein Startdatum kann einem ISO-Format entsprechen, während es nach dem Enddatum liegt. Eine Menge kann positiv sein, aber den aktuellen Bestand überschreiten. Diese Fehler erfordern Anwendungskontext, gespeicherten Status oder Beziehungen zwischen Feldern.
Einige semantische Einschränkungen können in einem Schema angenähert werden, viele gehören jedoch zur Dienstlogik, wo maßgebliche Daten und Transaktionsstatus verfügbar sind. Fehlerantworten auf dieser Ebene sollten das relevante Feld oder die entsprechende Regel identifizieren, ohne den Eindruck zu erwecken, dass der Text JSON fehlerhaft war. ToolAcre kann diese Entscheidungen nicht reproduzieren, da es weder den Vertrag kennt noch die Eingabe an die Anwendung sendet, die die Geschäftsregel besitzt.
Arbeitsbeispiel: eine Nutzlast durch drei Prüfungen
Beginnen Sie mit `{"sku":"A-19","quantity":3,"warehouse":"north"}`. ToolAcre akzeptiert es: Alle Namen und Werte folgen der JSON-Grammatik. Ein Schema kann dann ein Objekt, eine nicht leere Zeichenfolgen-SKU, eine positive Ganzzahlmenge und einen der dokumentierten Lagercodes erfordern. Angenommen, diese Nutzlast erfüllt auch diese Einschränkungen. Keine der Überprüfungen hat bestätigt, dass die SKU A-19 existiert oder dass sich im Norden drei Einheiten befinden.
Der Inventardienst führt die dritte Prüfung anhand aktueller Datensätze durch und lehnt die Anfrage möglicherweise als nicht verfügbar ab. Eine Änderung der Einrückung kann dieses Ergebnis nicht ändern. Wenn `quantity` als `03` geschrieben würde, würde die Syntax zuerst fehlschlagen; Wenn es `"3"` wäre, würde das Parsen erfolgreich sein, aber die Schematypprüfung würde fehlschlagen; mit dem numerischen Wert `3` bleibt nur die Lebendbestandsregel übrig. Dasselbe Feld kann daher aus drei verschiedenen Gründen auf drei verschiedenen Ebenen ausfallen.
Wo jeder Scheck hingehört
Führen Sie die Syntaxvalidierung so früh wie möglich während der Bearbeitung durch, da spätere Prüfungen bei Text, der nicht analysiert werden kann, nicht zuverlässig funktionieren können. Erzwingen Sie die deklarierte Form an jeder nicht vertrauenswürdigen Anwendungsgrenze, anstatt davon auszugehen, dass ein Client dies bereits getan hat. Bewerten Sie Geschäftsinvarianten in der Komponente, die den erforderlichen Status besitzt, insbesondere wenn sich die Antwort zwischen Anfragen ändern kann.
Clientseitige Prüfungen verbessern das Feedback, ersetzen jedoch nicht die serverseitige Durchsetzung. Umgekehrt sollte eine Serverantwort mit der Meldung „ungültig JSON“ für den Parsing-Fehler reserviert werden und nicht für jede abgelehnte Anfrage verwendet werden. Eine klare Trennung führt zu nützlichen Diagnosen: Zeile und Spalte für Syntax, Instanzpfade für strukturelle Einschränkungen und domänenspezifische Codes oder Meldungen für semantische Konflikte. ToolAcre liefert nur die erste Kategorie.
Was dies nicht abdeckt
Dieser Formatierer erstellt oder bewertet kein JSON-Schema, wählt keinen Schemaentwurf aus, löst Schemaverweise nicht auf, fügt keine Standardwerte ein und wandelt Zeichenfolgen nicht in Zahlen um. Es kennt auch nicht das OpenAPI-Dokument oder die benutzerdefinierten Validierungskonventionen einer API. Das Bereitstellen eines Schemas neben der Eingabe würde das Ergebnis von ToolAcre nicht ändern, da es in diesem Tool keinen Schema-Verarbeitungsschritt gibt.
Die Syntaxvalidierung erkennt hier auch keine doppelten Objektnamen; `JSON.parse` behält das letzte Vorkommen vor der Formatierung bei. Es garantiert auch keine numerische Genauigkeit, kanonische Bytes, sichere Darstellung oder Autorisierung. Jedes dieser Anliegen benötigt einen eigenen Vertrag und eine eigene Umsetzung. Vermeiden Sie es, sie in einem einzigen grünen „gültigen“ Abzeichen zusammenzufassen, da dadurch verborgen bleibt, welche Beweise gesammelt wurden und welche Fragen nie gestellt wurden.
Fazit: „gültig“ benötigt ein Qualifikationsmerkmal
Qualifizieren Sie jeden Validierungsanspruch. „Valid JSON“ bedeutet, dass der Text der Grammatik folgt. „Gültig für dieses Schema“ bedeutet, dass der analysierte Wert einen benannten Strukturvertrag erfüllt. „Vom Dienst akzeptiert“ bedeutet, dass die aktuellen Anwendungsregeln den Betrieb zulassen. In vielen Arbeitsabläufen ist das Übergeben einer Ebene für die nächste erforderlich, aber es ist nie ein Beweis dafür, dass alle späteren Ebenen übergeben wurden.
Verwenden Sie ToolAcre zum Formatieren und Überprüfen der strengen Syntax, einschließlich der Ablehnung von Nicht-JSON-Literalen wie `NaN` und `Infinity`. Verwenden Sie dann das Schema und die Anwendung, die die Nutzlast tatsächlich steuern. Wenn eine Anfrage immer noch fehlschlägt, lesen Sie den Fehler auf seiner eigenen Ebene, anstatt den korrekten JSON wiederholt neu zu formatieren. Das Tool verfügt über keine Schemaprüfungen, und diese explizite Grenze ist nützlicher als ein zu weit gefasstes Gültigkeitsversprechen.