Alat pembangun · JSON pemformat & pengesah
Sah JSON lwn sah terhadap skema: dua makna 'sah'
· Latar belakang
json piawaian pengesahan
Pengesah yang mengatakan JSON anda sah bermakna ia sahaja menghuraikan. Siaran ini menerangkan tahap kesahan (sintaks, struktur, semantik) dan sebab JSON Skema wujud untuk segala-galanya di luar tatabahasa.
Sah, dan masih ditolak
Permintaan boleh menjadi JSON tanpa cela dan masih tidak boleh diterima oleh API. `{"username":"nori","plan":"gold"}` mempunyai pembatas yang seimbang, nama yang disebut dan nilai undang-undang, namun perkhidmatan mungkin memerlukan e-mel, menolak nama pelan atau melarang penciptaan akaun dalam keadaan semasa. Penghurai dan aplikasi menjawab soalan yang berbeza, jadi kedua-dua keputusan boleh betul.
ToolAcre sahaja menjawab soalan pertama: bolehkah teks ini dihuraikan sebagai JSON yang ketat dalam had inputnya? Ia tidak memuatkan skema, menyemak sifat yang diperlukan, mengesahkan format, menghubungi pangkalan data atau menilai peraturan perniagaan. Apabila alat menyatakan Sah, baca itu sebagai "sintaks JSON yang dibentuk dengan baik," bukan sebagai kelulusan daripada sistem yang akan menggunakan nilai tersebut.
Tahap satu: sintaks yang terbentuk dengan baik
Pengesahan sintaks menyemak tatabahasa JSON: satu nilai peringkat teratas, bekas yang dipasangkan dengan betul, nama objek yang disebut, koma dan titik bertindih yang sah, rentetan undang-undang, nombor undang-undang dan literal tepat. Ia menolak `NaN` dan `Infinity`, ulasan, koma di belakang dan rentetan petikan tunggal. Ia menerima sebarang bentuk sah tatabahasa, termasuk nombor tunggal atau objek dengan medan yang tidak dikenali.
Sumber cacat mempunyai titik kegagalan teks, jadi ToolAcre boleh melaporkan baris dan lajur untuk aksara mustahil pertama. Koma yang hilang boleh menyebabkan petikan seterusnya dilaporkan; koma mengekor boleh menyebabkan pembatas penutup dilaporkan. Membetulkan sintaks mencipta nilai yang boleh dihuraikan tetapi tidak menetapkan bahawa nilai itu mempunyai bentuk atau makna yang diharapkan oleh program lain.
Tahap dua: bentuk
Pengesahan bentuk bertanya sama ada nilai yang dihuraikan sepadan dengan kontrak yang diisytiharkan. Skema pengguna mungkin memerlukan `email`, mengekang `age` kepada integer sekurang-kurangnya 18, menghadkan `tier` kepada `free` atau `pro` dan tidak membenarkan sifat yang tidak diketahui. `{"email":false,"tier":"gold"}` adalah sah JSON sintaks tetapi gagal peraturan struktur tersebut kerana jenis nilai dan pilihan yang dibenarkan adalah salah.
JSON Skema ialah satu cara untuk menyatakan kekangan sedemikian, tetapi ToolAcre tidak melaksanakannya. Pengesah skema biasanya melaporkan laluan contoh seperti `/tier`, kata kunci seperti `enum` dan mesej penerangan dan bukannya karet penghurai. Kekalkan kontrak versi skema dan API di sebelah muatan semasa mendiagnosis tahap ini; menukar tanda baca tidak akan membaiki nilai yang dihuraikan dengan betul bagi bentuk yang salah.
Aras tiga: makna
Makna bergantung pada fakta dan peraturan di luar bentuk statik dokumen. `accountId` boleh mempunyai corak rentetan yang betul sambil menamakan tiada akaun. Tarikh mula boleh sepadan dengan format gaya ISO semasa jatuh selepas tarikh tamat. Sesuatu kuantiti boleh positif tetapi melebihi stok semasa. Kegagalan ini memerlukan konteks aplikasi, keadaan disimpan atau perhubungan antara medan.
Beberapa kekangan semantik boleh dianggarkan dalam skema, tetapi kebanyakannya tergolong dalam logik perkhidmatan di mana data berwibawa dan keadaan transaksi tersedia. Respons ralat pada tahap ini harus mengenal pasti medan atau peraturan yang berkaitan tanpa berpura-pura bahawa teks JSON salah bentuk. ToolAcre tidak boleh mengeluarkan semula keputusan tersebut kerana ia tidak mengetahui kontrak dan tidak menghantar input kepada aplikasi yang memiliki peraturan perniagaan.
Contoh kerja: satu muatan melalui tiga cek
Mulakan dengan `{"sku":"A-19","quantity":3,"warehouse":"north"}`. ToolAcre menerimanya: semua nama dan nilai mengikut tatabahasa JSON. Skema kemudiannya boleh memerlukan objek, rentetan tidak kosong SKU, kuantiti integer positif dan salah satu kod gudang yang didokumenkan. Katakan muatan ini melepasi kekangan tersebut juga. Tiada semakan telah mengesahkan bahawa SKU A-19 wujud atau utara memegang tiga unit.
Perkhidmatan inventori melakukan semakan ketiga terhadap rekod semasa dan mungkin menolak permintaan sebagai tidak tersedia. Menukar lekukan tidak boleh mengubah hasil itu. Jika `quantity` ditulis sebagai `03`, sintaks akan gagal dahulu; jika ia `"3"`, penghuraian akan lulus tetapi semakan jenis skema akan gagal; dengan angka `3`, sahaja peraturan stok langsung yang tinggal. Oleh itu, medan yang sama boleh gagal pada tiga lapisan berbeza atas tiga sebab yang berbeza.
Di mana setiap cek berada
Jalankan pengesahan sintaks seawal mungkin semasa mengedit, kerana semakan kemudian tidak boleh beroperasi dengan pasti pada teks yang tidak menghuraikan. Kuatkuasakan bentuk yang diisytiharkan pada setiap sempadan aplikasi yang tidak dipercayai dan bukannya menganggap pelanggan sudah berbuat demikian. Nilaikan invarian perniagaan dalam komponen yang memiliki keadaan yang diperlukan, terutamanya apabila jawapan boleh berubah antara permintaan.
Semakan pihak pelanggan menambah baik maklum balas tetapi tidak menggantikan penguatkuasaan pihak pelayan. Sebaliknya, respons pelayan yang mengatakan "JSON tidak sah" harus dikhaskan untuk kegagalan penghuraian dan bukannya digunakan untuk setiap permintaan yang ditolak. Pemisahan yang jelas menghasilkan diagnostik yang berguna: baris dan lajur untuk sintaks, laluan contoh untuk kekangan struktur dan kod atau mesej khusus domain untuk konflik semantik. ToolAcre membekalkan kategori pertama sahaja.
Perkara ini tidak meliputi
Pemformat ini tidak mengarang atau menilai JSON Skema, memilih draf skema, menyelesaikan rujukan skema, memasukkan lalai atau memaksa rentetan ke dalam nombor. Ia juga tidak mengetahui dokumen OpenAPI atau konvensyen pengesahan tersuai API. Membekalkan skema bersama input tidak akan mengubah hasil ToolAcre kerana tiada langkah pemprosesan skema dalam alat ini.
Pengesahan sintaks juga tidak mengesan nama objek pendua di sini; `JSON.parse` menyimpan kejadian terakhir sebelum memformat. Ia juga tidak menjamin ketepatan berangka, bait kanonik, rendering atau kebenaran yang selamat. Setiap kebimbangan tersebut memerlukan kontrak dan pelaksanaannya sendiri. Elakkan memampatkannya menjadi satu lencana "sah" hijau, kerana berbuat demikian menyembunyikan bukti yang dikumpulkan dan soalan yang tidak pernah ditanya.
Bawa pulang: 'sah' memerlukan kelayakan
Layakkan setiap tuntutan pengesahan. “Sah JSON” bermaksud teks mengikut tatabahasa. "Sah terhadap skema ini" bermakna nilai yang dihuraikan memenuhi kontrak struktur yang dinamakan. “Diterima oleh perkhidmatan” bermaksud peraturan aplikasi semasa membenarkan operasi. Melepasi satu lapisan adalah perlu untuk seterusnya dalam banyak aliran kerja, tetapi ia tidak pernah menjadi bukti bahawa semua lapisan kemudiannya lulus.
Gunakan ToolAcre untuk memformat dan menyemak sintaks yang ketat, termasuk penolakan literal bukan JSON seperti `NaN` dan `Infinity`. Kemudian gunakan skema dan aplikasi yang sebenarnya mengawal muatan. Apabila permintaan masih gagal, baca ralat pada lapisannya sendiri dan bukannya memformat semula yang betul JSON berulang kali. Alat ini tidak mempunyai semakan skema dan sempadan eksplisit itu lebih berguna daripada janji kesahan yang melampaui batas.