Validuoti JSON sintaksę

tikrina JSON eilutės sintaksę ir nurodo pirmosios klaidos eilutę ir stulpelį

Kam naudojamas JSON tikrintuvas?

JSON patvirtinimo priemonė atlieka kuklesnį, bet tikslesnį vaidmenį nei formatuotojas: jis neperrašo nieko. Ji paima eilutę ir atsako į dvejetainį klausimą: ar šis tekstas atitinka JSON? RFC 8259? Jei taip, įrankis grąžina valdymą. Jei ne, tai tiksliai nurodo eilutę, stulpelį ir JSON ištrauką padėti kūrėjui nedelsiant ją išspręsti.

Praktiškai tai yra įrankis, kurį naudojame, kai tik analizatorius kažkur pateikia klaidos pranešimą paslaptingas, pvz., SyntaxError: Netikėtas prieigos raktas } JSON 217 pozicijoje. Užuot suskaičiuokite simbolius ranka redaktoriuje, įklijuokite visą eilutę, perskaitykite padėtį ir pamatysite nusikaltimo išrašas.

Patvirtinimas, formatavimas: dvi skirtingos operacijos

Mes dažnai painiojame abu. Mūsų JSON formatu naudojamas tinkamas JSON ir perrašo jį su įskaitoma įtrauka. Tvirtintoją tenkina sintaksinis verdiktas. Jis neatlieka semantinio patvirtinimo: nežino, ar el. pašto lauko reikšmė el. laiškas, nei struktūra, atitinkanti JSON schemą. Tam mes naudojame tam skirti įrankiai (ajv Node, justinrainbow/json-schema PHP).

Klasikinė derinimo seka yra tokia: pirmiausia patvirtinti (įrankis nurodo sintaksės klaidą), tada formatuoti (dabar galiojantis naudingasis krovinys tampa įskaitomas), palyginkite galiausiai su kitas informacinis apkrovas per mūsų JSON palyginimo priemonę.

Dažniausios JSON klaidos

  • Galinis kablelis: {"a": 1, "b": 2,}. Toleruojamas JavaScript, ECMAScript ir JSON5; paneigė grynas JSON. Tai yra #1 klaida kopijuojant ir įklijuojant iš kodo rengyklė.
  • Apostrofai vietoj dvigubų kabučių: {'a': 1} netinkamas. JSON priima tik dvigubas kabutes aplink raktus ir eilučių reikšmes.
  • Raktai be kabučių: {a: 1}, tinkama „JavaScript“ sintaksė, bet netinkamas JSON.
  • Valdymo simboliai be simbolių eilutėje: neapdorota nauja eilutė, a lentelės sudarymas. JSON reikalauja , , .
  • Komentarai: // komentaras arba /* */. Priimta JSONC (config VS Code) arba JSON5, atmesta gryname JSON.
  • Neteisinga koduotė: UTF-8 BOM failo pradžioje, neteisingas Latin-1 turinys konvertuota. Šiais atvejais tikrintuvas dažnai pateikia bendrą pranešimą.
  • Nebaigta struktūra: { arba [ be uždarymo, įprasta kai sutrumpinate naudingąjį krovinį kopijuodami ir įklijuodami.

Kaip tikrintuvas nustato klaidą

Įrankis naudoja PHP json_decode() su žyma JSON_THROW_ON_ERROR. PHP grąžina pranešimą, kuriame yra pozicija baitais (217 padėtis), kurią konvertuojame į eilutės / stulpelio pora, skaičiuojant eilučių lūžius prieš poslinkį. Maždaug 80 simbolių ištrauka yra tada apkirpkite padėtį, kad pateiktumėte kontekstą. Paprastai to pakanka nustatyti klaida: neteisinga citata, papildomas kablelis, trūkstamas skliaustas.

Įspėjimas: PHP nurodyta padėtis ne visada tiksliai atitinka pažeidimą. Ji yra dažnai po klaidos, kai analizatorius pasiduoda. Jei fragmente rodomas "pavadinimas": „Alisa“, }, tikroji klaida yra kablelis, o ne skliaustas.

Tipiški naudojimo atvejai

  • Sugadinta konfigūracija: composer.json, package.json, tsconfig.json, kurie neleidžia pradėti kūrimo. Įklijuojame, matome liniją, taisome.
  • Sutrumpintas API atsakymas: tarpinis serveris sumažina naudingą apkrovą. Struktūra nebaigta, tikrintojas apie tai praneša.
  • Webhook naudingoji apkrova: trečiosios šalies paslauga siunčia netinkamai suformuotą JSON. Validatorius leidžia kad pastebėtumėte problemą siuntėjo pusėje, nesigilindami į programos kodą.
  • JSON sukurtas sujungimo būdu: praktika, kurios reikia vengti, bet įprasta, ypač bash arba SQL. Tvirtinimo priemonė atskleidžia dvigubas kabutes be ištrūkimo.

Įrankio apribojimai

Tikrinimo priemonė netikrina pagal schemą. Jis nesako, kad jam trūksta lauko el. paštas, kad reikšmė nėra sveikasis skaičius arba kad laukiamas masyvas yra netinkamo ilgio. Šiems struktūriniams patikrinimams naudojame JSON schemą. Valdymo priemonė taip pat nepataiso JSON: nebandoma pridėti trūkstamo skliausto arba pašalinti papildomo kablelio. Tai pasirinkimas : automatinis taisymas per dažnai slepia tikras klaidas.

Dažnai užduodami klausimai

Kuo skiriasi linteris?

„Linter“ eina toliau: ji taip pat tikrina stiliaus taisykles (abėcėlę, pavadinimų taisykles), aptinka pasikartojančias vertes, siūlo patobulinimus. Tikrinimo priemonė ir toliau laikosi reikalavimų sintaksė.

Mano JSON galioja, bet programa jį atmeta?

Patikrinkite kodavimą (UTF-8 be BOM), serverio dydžio apribojimą, numatomus tipus. JSON sintaksiškai teisinga vis tiek gali neatitikti programos schemos.

Ar tikrinimo priemonė išsaugo mano JSON?

Ne. Apdorojimas yra sinchroninis serverio pusėje, be atkaklumo. Labai jautriems duomenims, vis tiek teikia pirmenybę vietiniam patvirtinimui naudojant jq arba PHP scenarijų.

Užklausos pavyzdys

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

Įvesties schema

Laukas Tipas Privalomas Numatytasis
input text

Galiniai taškai

  • GET https://cdrn.fr/api/v1/tools - išvardija visus galimus įrankius
  • GET https://cdrn.fr/api/v1/tools/json-validator - gauna šio įrankio schemą
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - vykdo šį įrankį su JSON payload