Alat pengembang · JSON pemformat & validator
Mengapa tanda koma di belakang pecah JSON dan di mana titik validator
· Cara kerjanya
json alur kerja pengembang validasi
Tanda koma di akhir adalah satu-satunya kesalahan JSON yang paling umum, dan kesalahan tersebut tidak pernah berakhir pada koma itu sendiri. Pelajari tata bahasa yang diharapkan setelah koma dan cara membaca posisi yang dilaporkan.
Bug satu karakter yang membutuhkan waktu sepuluh menit untuk ditemukan
Bug satu karakter yang membutuhkan waktu sepuluh menit untuk ditemukan - konfigurasi yang diedit dengan tangan, tanda koma setelah properti terakhir, dan build yang gagal. Parser yang ketat mengikuti urutan token yang sebenarnya ada dalam dokumen. Pertimbangkan sebuah objek yang diakhiri dengan `'enabled': true,` dan array yang diakhiri dengan `'blue',`: kedua pemisah menjanjikan item lain meskipun token berikutnya menutup wadah.
ToolAcre tidak mendapatkan lokasi dari pesan mesin browser. JSON.parse pertama-tama memutuskan validitas; hanya setelah kegagalan barulah pemindai repositori menelusuri teks dan melaporkan karakter pertama yang tidak dapat diterima. Untuk tanda koma, karakter tersebut adalah tanda kurung kurawal atau kurung kurawal, dan alasannya secara eksplisit berbunyi “Tanda koma”. Dalam suatu objek, nama anggota lain yang dikutip tidak ada; dalam sebuah array, nilai lengkap lainnya tidak ada.
Apa yang dikatakan tata bahasa JSON setelah koma
Apa yang dikatakan tata bahasa JSON setelah koma — RFC 8259 menggunakan koma untuk memisahkan nilai dalam array dan anggota dalam objek. Oleh karena itu, pemisah memerlukan item yang valid di setiap sisinya. Setelah koma objek, parser mengharapkan nama yang diberi tanda kutip ganda, titik dua, dan nilai. Setelah koma array, ia mengharapkan nilai JSON yang valid. Pembatas penutup tidak memenuhi produksi apa pun.
Pemisah berada di antara dua anggota atau elemen, tidak pernah setelah anggota atau elemen terakhir. Menghapus koma terakhir tidak mengubah nilai atau urutan; itu mengembalikan tata bahasa yang menutup wadah langsung setelah nilai akhirnya. Ini juga mengapa koma dapat muncul setelah setiap item sebelumnya tanpa masalah: setiap koma tersebut diikuti oleh item berikutnya yang dijanjikan.
Mengapa kesalahannya sampai pada tanda kurung tutup
Mengapa kesalahan berada di tanda kurung tutup — koma sah di tengah wadah, sehingga parser tidak dapat menolaknya begitu saja. Ini menggunakan pemisah dan mengubah status untuk mengharapkan nama atau nilai lain. Kontradiksi menjadi pasti hanya ketika `}` atau `]` muncul. Pembatas tersebut adalah tempat item yang dijanjikan terbukti tidak ada, meskipun koma sebelumnya menyebabkan transisi keadaan.
Oleh karena itu, pembatas yang dilaporkan adalah bukti tentang status parser, bukan saran untuk menghapus kurung kurawal atau kurung kurawal. Baca satu token ke kiri. Jika token tersebut berupa koma dan pembatas menutup wadah yang sama, hapus koma dan pertahankan penutupnya. Pemindai ToolAcre memberi nama kondisi koma tambahan dan memberikan posisi sumber setelah JSON.parse menolak dokumen.
JavaScript, Python dan linter modern mengizinkannya, JSON tidak
JavaScript, Python dan linter modern mengizinkannya, JSON tidak — literal bahasa sumber sering kali mengizinkan koma setelah item terakhir karena membuat baris yang disusun ulang dan penambahan di masa mendatang lebih mudah untuk ditinjau. Pemformat bahkan dapat menyisipkan atau mempertahankan gaya tersebut. Kemudahan-kemudahan tersebut menjadi milik tata bahasa masing-masing. Literal objek `.js` atau kamus Python dapat menjadi sumber yang valid sementara tanda baca yang sama tetap tidak valid dalam dokumen RFC 8259 JSON.
Editor yang dikonfigurasi untuk JavaScript mungkin tidak menampilkan peringatan ketika fragmen yang ditempel diakhiri dengan koma. Parser tujuan masih mengontrol penerimaan. Gunakan mode bahasa JSON untuk teks `.json` dan validasi payload persis yang dikirim ke API atau bidang konfigurasi. Kelonggaran dalam file sumber, linter, atau parser JSON5 bukanlah bukti yang dapat dialihkan tentang konsumen JSON yang ketat.
Contoh praktis: tiga koma tambahan dalam satu file
Contoh praktis: tiga koma tambahan dalam satu file — misalkan `features` diakhiri dengan `"beta",`, objek yang memuatnya diakhiri dengan `"enabled": true,`, dan anggota root kedua memiliki kesalahan yang sama. Validasi pertama berhenti di tanda kurung tutup setelah `beta`. Menghapus koma tersebut memungkinkan penguraian berlanjut hingga kurung kurawal penutup setelah `true`, dan memperbaiki lokasi kedua akan mengungkapkan kesalahan objek tingkat akar yang tersisa.
Urutan ini diharapkan karena parser umumnya melaporkan titik pertama di mana kelanjutan tidak mungkin dilakukan, bukan setiap kerusakan selanjutnya. Petakan setiap baris dan kolom ke pembatas penutupnya, periksa pemisah tepat sebelum baris tersebut, buat satu perubahan yang disengaja, dan jalankan validasi lagi. Jangan menghapus semua koma secara massal: diperlukan pemisah antara tetangga sebenarnya. Validasi berulang membedakan tiga koma terminal yang tidak valid dari koma yang valid di seluruh dokumen yang sama.
Varian yang menghasilkan kesalahan yang sama
Varian yang menghasilkan kesalahan pemisah terkait — koma di depan, dua koma berturut-turut, dan koma setelah nilai akar semuanya menyalahgunakan karakter yang sama tetapi melanggar status parser yang berbeda. Koma di depan tidak memiliki item yang lengkap di sebelah kirinya. Koma yang berurutan tidak memberikan item di antara pemisah. Koma setelah nilai akar lengkap muncul setelah teks JSON mencapai akhir yang valid.
Kasus-kasus tersebut tidak boleh secara otomatis diberi label tanda koma. Alasan tepatnya bergantung pada posisi dan status kontainer. Di dalam `{"a":1,,"b":2}`, koma kedua tidak diharapkan di awal nama anggota yang dikutip. Di `[ ,1]`, koma pertama muncul jika nilai diperlukan. Periksa token diagnostik dan sekitarnya daripada menerapkan aturan universal “hapus koma sebelumnya” di luar pola pembatas penutup.
Hal ini tidak tercakup dalam hal ini
Apa yang tidak tercakup dalam hal ini — JSON5 dan beberapa alur kerja JSON-dengan-komentar sengaja mengizinkan koma tambahan. File yang ditulis untuk salah satu tata bahasa tersebut harus menggunakan parser, ekstensi, dan alat yang dinyatakan. Memperlakukannya sebagai JSON yang ketat akan menghasilkan kesalahan yang mencerminkan ketidakcocokan format, belum tentu merupakan kesalahan penulisan. Sebaliknya, menerimanya dengan parser permisif tidak membuat sumber aman untuk dikirim ke titik akhir JSON yang ketat.
Mengubah parser hanya untuk membungkam diagnostik ini akan mengubah bahasa yang diterima dan dapat menyembunyikan ketidakcocokan dengan konsumen akhir. Komentar, nama yang tidak diberi tanda kutip, dan string yang diberi tanda kutip tunggal dapat menyertai tanda koma dalam format yang diperluas, sehingga menimbulkan kegagalan tambahan saat teks melewati batas. Konfirmasikan kontrak tujuan terlebih dahulu. Jika tertulis JSON, hapus sintaks ekstensi; jika tertulis JSON5 atau JSONC, validasi dengan alat yang mengimplementasikan format persis tersebut.
Kesimpulan: lihat satu token di sebelah kiri posisi yang dilaporkan
Kesimpulan: lihat satu token di sebelah kiri posisi yang dilaporkan — ketika tanda sisipan berada di bawah `}` atau `]`, koma sebelumnya mungkin menjanjikan anggota atau elemen yang tidak pernah tiba. Pertahankan pembatas penutup yang diperlukan secara struktural dan hapus hanya pemisah terminal tersebut. Kemudian validasi seluruh dokumen lagi, karena lokasi pertama yang diperbaiki mungkin menemukan tanda koma lain di wadah selanjutnya.
ToolAcre membuat tanggung jawab tetap sempit: JSON.parse memutuskan bahwa dokumen tersebut tidak valid, dan pemindai lokal memberikan alasan struktural yang stabil ditambah baris dan kolom setelah kegagalan. Gunakan koordinat tersebut untuk memeriksa konteks parser daripada menyalahkan karakter yang disorot secara terpisah. Tanda koma di akhir adalah pengeditan satu karakter, namun memahami mengapa kesalahan muncul pada pembatas berikut membuat diagnosis yang sama dapat diandalkan di seluruh objek, array, dan konfigurasi yang sangat bertumpuk.