Ivvalida s-sintassi ta' JSON

jiċċekkja s-sintassi ta' string JSON u jindika l-linja u l-kolonna tal-ewwel żball

Għal xiex jintuża validatur JSON?

Validatur JSONgħandu rwol aktar modest, iżda aktar preċiż, minn formatatur: ma jerġax jikteb xejn. Huwa jieħu string u jwieġeb mistoqsija binarja: dan it-test huwa konformi JSON? RFC 8259? Jekk iva, l-għodda tirritorna l-kontroll. Jekk le, tindika eżattament ir-ringiela, il-kolonna u estratt tal-JSON madwar il-problema, biex tgħin lill-iżviluppatur jiffissa immedjatament.

Fil-prattika, hija l-għodda li nużaw hekk kif parser x'imkien jirritorna messaġġ ta 'żball kriptiku bħal SyntaxError: token mhux mistenni } f'JSON fil-pożizzjoni 217. Pjuttost milli għodd il-karattri bl-idejn f'editur, waħħal is-sekwenza sħiħa, aqra l-pożizzjoni u ara l-estratt offiżi.

Validazzjoni, ifformattjar: żewġ operazzjonijiet distinti

Ħafna drabi nħalltu t-tnejn. Il-formatter JSON tagħna jieħu JSON validu u jerġa’ jikteb b’indentazzjoni li tinqara. Il-validatur huwa sodisfatt b'verdett sintattiku. Hu ma jwettaqx validazzjoni semantika: ma jafx jekk il-valur ta' qasam email qisu email, u lanqas jekk l-istruttura taqbel ma' Skema JSON. Għal dan, nużaw għodod dedikati (ajv f'Node, justinrainbow/json-schema f'PHP).

Is-sekwenza klassika fid-debugging hija: valida l-ewwel (l-għodda tindika l-iżball tas-sintassi), format imbagħad (it-tagħbija li issa valida ssir tinqara), qabbel finalment ma' tagħbija ta' referenza oħra permezz tal-komparatur JSON tagħna.

L-iżbalji JSON l-aktar komuni

  • Vigola ta' wara: {"a": 1, "b": 2,}. Tollerat minn JavaScript, ECMAScript u JSON5; miċħuda minn JSON pur. Dan huwa l-iżball #1 meta tikkopja u tippejstja minn editur tal-kodiċi.
  • Apostrofi minflok kwotazzjonijiet doppji: {'a': 1} mhux validu. JSON jaċċetta biss kwotazzjonijiet doppji, madwar ċwievet u valuri string.
  • Ċwievet mhux ikkwotati: {a: 1}, sintassi JavaScript valida iżda JSON mhux validu.
  • Karattri ta' kontroll mhux maħruba fi string: linja ġdida mhux maħduma, a tabulazzjoni. JSON jeħtieġ , , .
  • Kummenti: // kumment jew /* */. Aċċettat f'JSONC (Konfig VS Code) jew JSON5, miċħuda f'JSON pur.
  • Kodifikazzjoni mhux korretta: BOM UTF-8 fil-bidu tal-fajl, kontenut Latin-1 mhux korrett konvertiti. Il-validatur spiss jirritorna messaġġ ġeneriku għal dawn il-każijiet.
  • Struttura mhux mitmuma: { jew [ mingħajr għeluq, komuni meta taqta' tagħbija meta tikkopja u tippejstja.

Kif il-validatur jillokalizza l-iżball

L-għodda tuża json_decode() tal-PHP bil-marka JSON_THROW_ON_ERROR. PHP jirritorna messaġġ li fih pożizzjoni f'bytes (pożizzjoni 217), li aħna nikkonvertiwh par linja/kolonna billi jingħaddu l-waqfiet tal-linja qabel l-offset. Estratt ta' madwar 80 karattru huwa imbagħad aqta madwar il-pożizzjoni biex tagħti kuntest. Dan huwa ġeneralment biżżejjed biex jiġi identifikat l-iżball: kwotazzjoni żbaljata, virgola żejda, parentesi nieqsa.

Twissija: il-pożizzjoni rrappurtata mill-PHP mhix dejjem eżattament il-karattru li joffendi. Hi spiss wara l-iżball, meta l-parser ikun ċeda. Jekk is-snippet juri "name": "Alice", }, l-iżball attwali huwa l-virgola, mhux iċ-ċinga.

Każijiet ta' użu tipiċi

  • Konfigurazzjoni korrotta: composer.json, package.json, tsconfig.json li jipprevjenu bini milli jibda. Aħna paste, naraw il-linja, nikkoreġu.
  • Reazzjoni API maqtugħa: Prokura jaqta' t-tagħbija. L-istruttura mhix lesta, il-validatur jirrapporta dan.
  • Webhook Payload: Servizz ta’ parti terza jibgħat JSON malformat. Il-validatur jippermetti biex tinnota l-problema fuq in-naħa tal-mittent mingħajr ma tgħaddas fil-kodiċi tal-applikazzjoni.
  • JSON mibni b'konkatenazzjoni: prattika biex tevita iżda komuni, speċjalment f'bash jew fl-SQL. Il-validatur jiżvela kwotazzjonijiet doppji mhux maħruba.

Limitazzjonijiet tal-Għodda

Il-validatur ma jivvalidax kontra skema. Ma jgħidx li qed jitlef il-qasam email, li l-valur mhuwiex numru sħiħ jew li l-array mistenni m'għandux it-tul korrett. Għal dawn il-kontrolli strutturali, nużaw JSON Schema. Il-validatur lanqas ma jikkoreġi l- JSON: ma jipprovax iżżid ċinga nieqsa jew ineħħi virgola żejda. Hija għażla : korrezzjoni awtomatika ħafna drabi taħbi żbalji reali.

Mistoqsijiet frekwenti

X'inhi d-differenza ma' linter?

A linter imur lil hinn: jiċċekkja wkoll ir-regoli tal-istil (alfabetiku, konvenzjonijiet tal-ismijiet), jiskopri valuri duplikati, jissuġġerixxi titjib. Il-validatur jibqa' fuq il-konformità sintattiku.

JSON tiegħi huwa validu, iżda l-applikazzjoni tiegħi tirrifjutah?

Iċċekkja l-kodifikazzjoni (UTF-8 mingħajr BOM), il-limitu tad-daqs tan-naħa tas-server, it-tipi mistennija. A JSON sintattikament korrett xorta jista' ma jikkorrispondix mal-iskema tal-applikazzjoni.

Il-validatur iżomm il-JSON tiegħi?

Le L-ipproċessar huwa sinkroniku min-naħa tas-server, mingħajr persistenza. Għal data sensittiva ħafna, xorta jippreferu validazzjoni lokali permezz ta' jq jew script PHP.

Eżempju ta' talba

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

Skema ta' input

Kamp Tip Meħtieġ Default
input text

Endpoints

  • GET https://cdrn.fr/api/v1/tools - telenka l-għodod kollha disponibbli
  • GET https://cdrn.fr/api/v1/tools/json-validator - tikseb l-iskema ta' din l-għodda
  • POST https://cdrn.fr/api/v1/tools/json-validator/execute - teżegwixxi din l-għodda b'payload JSON