Validēt JSON sintaksi
- Vadības panelis
- Dokumentācija
- API
Kam tiek izmantots JSON validators?
JSON pārbaudītājam ir pieticīgāka, bet precīzāka loma nekā formatētājam: tas nepārraksta nekas. Tas aizņem virkni un atbild uz bināru jautājumu: vai šis teksts atbilst JSON? RFC 8259? Ja jā, rīks atgriež kontroli. Ja nē, tas precīzi norāda JSON rindu, kolonnu un izrakstu novērst problēmu, lai palīdzētu izstrādātājam to nekavējoties novērst.
Praksē tas ir rīks, ko mēs izmantojam, tiklīdz parsētājs kaut kur atgriež kļūdas ziņojumu
noslēpumaini, piemēram, SyntaxError: Unexpected token } JSON 217. pozīcijā. Drīzāk nekā
saskaitiet rakstzīmes ar roku redaktorā, ielīmējiet visu virkni, izlasiet pozīciju un skatiet
aizskarošais izraksts.
Validācija, formatēšana: divas atšķirīgas darbības
Mēs bieži sajaucam abus. Mūsu JSON formatētājs izmanto derīgu JSON un
pārraksta to ar lasāmu atkāpi. Validators ir apmierināts ar sintaktisko spriedumu. Viņš
neveic semantisko validāciju: tā nezina, vai lauka e-pasts vērtība
izskatās kā e-pasts, ne arī tad, ja struktūra atbilst JSON shēmai. Šim nolūkam mēs izmantojam
īpaši rīki (ajv programmā Node, justinrainbow/json-schema PHP).
Klasiskā atkļūdošanas secība ir šāda: vispirms apstiprināt (rīks norāda sintakses kļūdu), pēc tam formatējiet (tagad derīgā krava kļūst lasāma), salīdziniet beidzot ar cita atsauces slodze, izmantojot mūsu JSON salīdzinātāju.
Visizplatītākās JSON kļūdas
- Beigas komats:
{"a": 1, "b": 2,}. Tolerēja ar JavaScript, ECMAScript un JSON5; noliedz tīrs JSON. Šī ir 1. kļūda, kopējot un ielīmējot no koda redaktors. - Apostrofi, nevis pēdiņas:
{'a': 1}nav derīgs. JSON pieņem tikai dubultpēdiņas ap taustiņiem un virknes vērtībām. - Atslēgas bez pēdiņām:
{a: 1}, derīga JavaScript sintakse, bet nederīgs JSON. - Vadlīnijas bez atspēriena virknē: neapstrādāta jaunrindiņa, a
tabulēšana. JSON nepieciešams
,,. - Komentāri:
// komentārsvai/* */. Pieņemts JSONC (config VS Code) vai JSON5, atteikts tikai JSON formātā. - Nepareizs kodējums: UTF-8 MK faila sākumā, nepareizs Latin-1 saturs pārveidots. Šajos gadījumos pārbaudītājs bieži atgriež vispārīgu ziņojumu.
- Nepabeigta struktūra:
{vai[bez aizvēršanas, izplatīta kad kopēšanas un ielīmēšanas laikā saīsināt lietderīgo slodzi.
Kā pārbaudītājs atrod kļūdu
Rīks izmanto PHP json_decode() ar karodziņu JSON_THROW_ON_ERROR. PHP
atgriež ziņojumu, kurā ir pozīcija baitos (pozīcija 217), kuru mēs konvertējam
rindu/kolonnu pāri, skaitot rindiņas pārtraukumus pirms nobīdes. Aptuveni 80 rakstzīmju izraksts ir
pēc tam apgrieziet pozīciju, lai sniegtu kontekstu. Tas parasti ir pietiekami, lai identificētu
kļūda: nevietā citāts, papildu komats, trūkst iekava.
Brīdinājums: PHP norādītā pozīcija ne vienmēr ir tieši aizskarošā persona. Viņa ir
bieži pēc kļūdas, kad parsētājs ir padevies. Ja fragmentā tiek rādīts "nosaukums":
"Alise", }, faktiskā kļūda ir komats, nevis figūriekava.
Tipiski lietošanas gadījumi
- Bojāta konfigurācija:
composer.json,package.json,tsconfig.json, kas neļauj sākt būvējumu. Mēs ielīmējam, mēs redzam līniju, mēs labojam. - Saīsināta API atbilde: starpniekserveris samazina lietderīgo slodzi. Struktūra nav pabeigta, pārbaudītājs par to ziņo.
- Tīmekļa aizķeres slodze: trešās puses pakalpojums nosūta nepareizi veidotu JSON. Validators ļauj lai pamanītu problēmu sūtītāja pusē, neiedziļinoties lietojumprogrammas kodā.
- JSON izveidots, savienojot: prakse, no kuras jāizvairās, taču izplatīta, īpaši bash valodā vai SQL. Validators atklāj dubultpēdiņas bez atsoļa.
Rīku ierobežojumi
Validators neveic validāciju saskaņā ar shēmu. Viņš nesaka, ka viņam trūkst laukuma
e-pasts, ka vērtība nav vesels skaitlis vai paredzamā masīva garums nav pareizs.
Šīm strukturālajām pārbaudēm mēs izmantojam JSON shēmu. Validators arī nelabo
JSON: tas nemēģina pievienot trūkstošo figūriekavu vai noņemt papildu komatu. Tā ir izvēle
: automātiskā labošana pārāk bieži slēpj reālas kļūdas.
Bieži uzdotie jautājumi
Kāda ir atšķirība no linteri?
Linter sniedzas tālāk: tā pārbauda arī stila noteikumus (alfabētiskā secība, nosaukumu piešķiršanas metodes), konstatē dublētās vērtības, iesaka uzlabojumus. Validators turpina ievērot atbilstību sintaktiskā.
Mans JSON ir derīgs, bet mana lietojumprogramma to noraida?
Pārbaudiet kodējumu (UTF-8 bez MK), servera puses izmēra ierobežojumu, paredzamos veidus. JSON sintaktiski pareizi joprojām var neatbilst lietojumprogrammas shēmai.
Vai pārbaudītājs saglabā manu JSON?
Nē. Servera pusē apstrāde notiek sinhroni, bez noturības. Ļoti sensitīviem datiem,
joprojām dod priekšroku vietējai validācijai, izmantojot jq vai PHP skriptu.
Pieprasījuma piemērs
curl -X POST https://cdrn.fr/api/v1/tools/json-validator/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Ievades shēma
| Lauks | Tips | Obligāts | Noklusējums |
|---|---|---|---|
input |
text | ✓ | – |
Endpoint
GET https://cdrn.fr/api/v1/tools- uzskaita visus pieejamos rīkusGET https://cdrn.fr/api/v1/tools/json-validator- iegūst šī rīka shēmuPOST https://cdrn.fr/api/v1/tools/json-validator/execute- izpilda šo rīku ar JSON payload