Validera JSON-syntax

kontrollerar syntaxen för en JSON-sträng och rapporterar rad och kolumn för eventuella fel

Vad används en JSON-validator till?

En JSON-validator har en mer blygsam, men mer precis roll än en formaterare: den skriver inte om något. Den tar en sträng och svarar på en binär fråga: är den här texten JSON som följer RFC 8259? Om ja, lämnar verktyget tillbaka kontrollen. Om nej, anger det exakt rad, kolumn och ett utdrag av JSON:en kring problemet, för att hjälpa utvecklaren att rätta omedelbart.

I praktiken är det verktyget man använder så snart en parser någonstans returnerar ett kryptiskt felmeddelande av typen SyntaxError: Unexpected token } in JSON at position 217. I stället för att räkna tecken för hand i en editor, klistrar man in hela strängen, läser positionen och ser det felaktiga utdraget.

Validering och formatering: två olika operationer

De två förväxlas ofta. Vår JSON-formaterare tar giltig JSON och skriver om den med läsbar indentering. Validatorn, däremot, nöjer sig med ett syntaktiskt utlåtande. Den utför ingen semantisk validering: den vet inte om värdet i ett email-fält ser ut som en e-postadress, eller om strukturen motsvarar ett JSON Schema. För det använder man dedikerade verktyg (ajv i Node, justinrainbow/json-schema i PHP).

Den klassiska kedjan vid debug är: validera först (verktyget visar syntaxfelet), formatera sedan (den nu giltiga payloaden blir läsbar), jämför till sist med en annan referenspayload via vår JSON-komparator.

De vanligaste JSON-felen

  • Efterföljande kommatecken (trailing comma): {"a": 1, "b": 2,}. Tolereras av JavaScript, ECMAScript och JSON5; avvisas av ren JSON. Det är fel nr 1 när man kopierar och klistrar in från en kodeditor.
  • Apostrofer i stället för dubbla citattecken: {'a': 1} är ogiltigt. JSON accepterar bara dubbla citattecken, kring både nycklar och strängvärden.
  • Ociterade nycklar: {a: 1}, giltig JavaScript-syntax men ogiltig JSON.
  • Icke-escapade kontrolltecken i en sträng: en rå radbrytning, en tabb. JSON kräver \n, \t, \r.
  • Kommentarer: // commentaire eller /* */. Accepterade i JSONC (VS Code-config) eller JSON5, avvisade i ren JSON.
  • Felaktig kodning: en UTF-8 BOM i början av filen, latin-1-innehåll dåligt konverterat. Validatorn returnerar ofta ett generiskt meddelande för dessa fall.
  • Oavslutad struktur: en { eller [ utan stängning, vanligt när man avhugger en payload vid kopiering.

Hur validatorn lokaliserar felet

Verktyget använder json_decode() i PHP med flaggan JSON_THROW_ON_ERROR. PHP returnerar ett meddelande som innehåller en position i bytes (position 217), som vi konverterar till ett par rad/kolumn genom att räkna radbrytningar före offseten. Ett utdrag på cirka 80 tecken klipps sedan kring positionen för att ge sammanhang. Det räcker i allmänhet för att hitta felet: ett felplacerat citattecken, ett extra kommatecken, en saknad klammer.

Observera: positionen som PHP rapporterar är inte alltid exakt det felaktiga tecknet. Den ligger ofta efter felet, vid den punkt där parsern gav upp. Om utdraget visar "name": "Alice", } är det verkliga felet kommatecknet, inte klammern.

Typiska användningsfall

  • Korrupt konfiguration: composer.json, package.json, tsconfig.json som hindrar ett bygge från att starta. Man klistrar in, ser raden, rättar.
  • Avhuggen API-respons: en proxy har klippt payloaden. Strukturen är inte avslutad, validatorn flaggar det.
  • Webhook-payload: en tredjepartstjänst skickar dåligt formad JSON. Validatorn gör det möjligt att se problemet på avsändarsidan utan att dyka ner i applikationskoden.
  • JSON byggd genom konkatenering: praxis att undvika men vanligt, särskilt i bash eller i SQL. Validatorn avslöjar icke-escapade dubbla citattecken.

Begränsningar hos verktyget

Validatorn utför inte validering mot ett schema. Den säger inte att fältet email saknas, att värdet inte är ett heltal eller att den förväntade arrayen inte har rätt längd. För sådana strukturella kontroller använder man JSON Schema. Validatorn rättar inte heller JSON:en: den försöker inte lägga till en saknad klammer eller ta bort ett överflödigt kommatecken. Det är ett val : automatisk korrigering döljer alltför ofta verkliga fel.

Vanliga frågor

Vad är skillnaden mot en linter?

En linter går längre: den kontrollerar också stilregler (alfabetisk ordning, namnkonventioner), upptäcker duplicerade värden, föreslår förbättringar. Validatorn håller sig till syntaktisk överensstämmelse.

Min JSON är giltig, men min applikation avvisar den?

Kontrollera kodningen (UTF-8 utan BOM), serverns storleksgräns, förväntade typer. En JSON som är syntaktiskt korrekt kan ändå sakna överensstämmelse med applikationsschemat.

Sparar validatorn min JSON?

Nej. Behandlingen är synkron på serversidan, utan persistens. För mycket känsliga data, föredra ändå en lokal validering via jq eller ett PHP-skript.

Exempelförfrågan

curl -X POST https://cdrn.fr/api/v1/tools/json-validator/execute \
  -H "Content-Type: application/json" \
  -d '{"input":"..."}'

Indatasschema

Fält Typ Obligatorisk Standard
input text

Slutpunkter

  • GET https://cdrn.fr/api/v1/tools - listar alla tillgängliga verktyg
  • GET https://cdrn.fr/api/v1/tools/json-validator - hämtar schemat för detta verktyg
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - kör detta verktyg med en JSON-payload