Bahasa Melayu

Alat pembangun · JSON pemformat & pengesah

Mengapa koma di belakang mematahkan JSON dan tempat yang ditunjukkan oleh pengesah

· Bagaimana ia berfungsi

json aliran kerja pembangun pengesahan

Sebab koma di belakang memecahkan JSON dan tempat pengesah menunjukkan ilustrasi dengan token JSON dan sempadan pengesahan yang tepat
Ilustrasi vektor ToolAcre asal

Koma di belakang ialah satu-satunya kesilapan JSON yang paling biasa dan ralat itu tidak pernah sampai pada koma itu sendiri. Ketahui perkara yang diharapkan oleh tatabahasa selepas koma dan cara membaca kedudukan yang dilaporkan.

Pepijat satu aksara yang mengambil masa sepuluh minit untuk dicari

Pepijat satu aksara yang mengambil masa sepuluh minit untuk dicari — konfigurasi diedit dengan tangan, koma ditinggalkan selepas sifat terakhir dan binaan yang gagal. Penghurai yang ketat mengikut urutan token yang sebenarnya terdapat dalam dokumen. Pertimbangkan objek yang berakhir dengan `'enabled': true,` dan tatasusunan yang berakhir dengan `'blue',`: kedua-dua pemisah menjanjikan item lain walaupun token seterusnya menutup bekas.

ToolAcre tidak memperoleh lokasi daripada mesej enjin pelayar. JSON.parse mula-mula memutuskan kesahihan; sahaja selepas kegagalan pengimbas repositori menjalankan teks dan melaporkan aksara pertama yang tidak boleh diterima. Untuk koma mengekor, watak itu ialah tanda kurung atau kurungan penutup, dan sebabnya dengan jelas menyatakan "Koma mengekor". Dalam objek, nama ahli lain yang dipetik hilang; dalam tatasusunan, satu lagi nilai lengkap tiada.

Apa yang dikatakan tatabahasa JSON selepas koma

Apa yang dikatakan tatabahasa JSON selepas koma — RFC 8259 menggunakan koma untuk memisahkan nilai dalam tatasusunan dan ahli dalam objek. Oleh itu pemisah memerlukan item yang sah pada setiap sisi. Selepas koma objek, penghurai menjangkakan nama petikan dua kali, titik bertindih dan nilai. Selepas koma tatasusunan, ia menjangkakan sebarang nilai JSON yang sah. Pembatas penutup tidak memuaskan kedua-dua pengeluaran.

Pemisah terletak di antara dua ahli atau elemen, tidak selepas yang terakhir. Mengalih keluar koma terakhir tidak mengubah nilai atau perintah; ia memulihkan tatabahasa yang menutup bekas terus selepas nilai terakhirnya. Inilah sebabnya mengapa koma boleh muncul selepas setiap item awal tanpa masalah: setiap koma tersebut diikuti oleh item seterusnya yang dijanjikan.

Mengapa ralat berlaku pada kurungan penutup

Mengapa ralat sampai pada kurungan penutup — koma adalah sah di tengah-tengah bekas, jadi penghurai tidak boleh menolaknya sahaja apabila dilihat. Ia menggunakan pemisah dan menukar keadaan untuk mengharapkan nama atau nilai lain. Percanggahan menjadi pasti sahaja apabila `}` atau `]` tiba. Pembatas itu adalah tempat item yang dijanjikan terbukti tidak hadir, walaupun koma sebelumnya menyebabkan peralihan negeri.

Oleh itu, pembatas yang dilaporkan adalah bukti tentang keadaan penghurai, bukan cadangan untuk memadamkan pendakap atau kurungan. Baca satu token ke kiri. Jika token itu ialah koma dan pembatas menutup bekas yang sama, keluarkan koma dan simpan penutup. Pengimbas ToolAcre menamakan keadaan koma belakang dan membekalkan kedudukan sumber selepas JSON.parse menolak dokumen.

JavaScript, Python dan linters moden membenarkannya, JSON tidak

JavaScript, Python dan linters moden membenarkannya, JSON tidak — literal bahasa sumber selalunya membenarkan koma selepas item terakhir kerana ia menjadikan baris tersusun semula dan penambahan masa hadapan lebih mudah untuk disemak. Pemformat mungkin juga memasukkan atau mengekalkan gaya itu. Kemudahan tersebut tergolong dalam setiap tatabahasa bahasa. Objek literal `.js` atau kamus Python boleh menjadi sumber yang sah manakala tanda baca yang kelihatan sama kekal tidak sah dalam dokumen RFC 8259 JSON.

Editor yang dikonfigurasikan untuk JavaScript mungkin tidak menunjukkan amaran apabila serpihan yang ditampal berakhir dengan koma. Penghurai destinasi masih mengawal penerimaan. Gunakan mod bahasa JSON untuk teks `.json` dan sahkan muatan tepat yang dihantar ke medan API atau konfigurasi. Kelonggaran dalam fail sumber, linter atau penghurai JSON5 bukanlah bukti boleh pindah milik tentang pengguna JSON yang ketat.

Contoh yang berfungsi: tiga koma di belakang dalam satu fail

Contoh yang berjaya: tiga koma mengekori dalam satu fail — katakan `features` berakhir dengan `"beta",`, objek yang mengandunginya berakhir dengan `"enabled": true,` dan ahli akar kedua mempunyai kesilapan yang sama. Pengesahan pertama berhenti pada kurungan penutup selepas `beta`. Mengalih keluar koma itu membolehkan penghuraian diteruskan sehingga pendakap penutup selepas `true` dan pembaikan lokasi kedua mendedahkan baki ralat objek peringkat akar.

Urutan ini dijangka kerana penghurai secara amnya melaporkan titik pertama di mana kesinambungan adalah mustahil, bukan setiap kecacatan kemudian. Petakan setiap baris dan lajur ke pembatas penutupnya, periksa pemisah sejurus sebelum itu, buat satu perubahan yang disengajakan dan jalankan pengesahan semula. Jangan padamkan semua koma secara pukal: pemisah antara jiran sebenar diperlukan. Pengesahan berulang membezakan tiga koma terminal yang tidak sah daripada koma yang sah di seluruh dokumen yang sama.

Varian yang menghasilkan ralat yang sama

Varian yang menghasilkan ralat pemisah yang berkaitan — koma di hadapan, dua koma berturut-turut dan koma selepas nilai akar semuanya menyalahgunakan aksara yang sama tetapi melanggar keadaan penghurai yang berbeza. Koma di hadapan tidak mempunyai item yang lengkap di sebelah kirinya. Koma berturut-turut tidak memberikan item antara pemisah. Koma selepas nilai akar lengkap muncul selepas teks JSON telah mencapai penghujung yang sah.

Kes tersebut tidak seharusnya dilabelkan secara automatik dengan koma mengekor. Sebab yang tepat bergantung pada kedudukan dan keadaan kontena. Di dalam `{"a":1,,"b":2}`, koma kedua tidak dijangka di mana nama ahli yang disebut harus bermula. Dalam `[ ,1]`, koma pertama muncul di mana nilai diperlukan. Periksa token diagnostik dan sekitarnya daripada menggunakan peraturan universal "padam koma sebelumnya" di luar corak pembatas tutup.

Perkara ini tidak meliputi

Perkara ini tidak meliputi — JSON5 dan beberapa aliran kerja JSON-dengan-komen sengaja membenarkan koma di belakang. Fail yang ditulis untuk salah satu daripada tatabahasa tersebut harus menggunakan penghurai, sambungan dan perkakas yang diisytiharkan. Menganggapnya sebagai JSON yang ketat akan menghasilkan ralat yang menggambarkan ketidakpadanan format, tidak semestinya kesilapan pengarangan. Sebaliknya, menerimanya dengan penghurai permisif tidak menjadikan sumber selamat untuk dihantar ke titik akhir JSON yang ketat.

Menukar parser semata-mata untuk menyenyapkan diagnostik ini mengubah bahasa yang diterima dan boleh menyembunyikan ketidakserasian dengan pengguna akhirnya. Komen, nama yang tidak disebut dan rentetan petikan tunggal mungkin mengiringi koma di belakang dalam format lanjutan, mewujudkan kegagalan tambahan apabila teks melintasi sempadan. Sahkan kontrak destinasi dahulu. Jika tertera JSON, alih keluar sintaks sambungan; jika tertera JSON5 atau JSONC, sahkan dengan alat yang melaksanakan format tepat itu.

Bawa pulang: lihat satu token di sebelah kiri kedudukan yang dilaporkan

Bawa pulang: lihat satu token di sebelah kiri kedudukan yang dilaporkan — apabila karet terletak di bawah `}` atau `]`, koma sebelumnya mungkin telah menjanjikan ahli atau elemen yang tidak pernah tiba. Kekalkan pembatas penutup yang diperlukan secara struktur dan keluarkan pemisah terminal itu sahaja. Kemudian sahkan keseluruhan dokumen sekali lagi, kerana lokasi pertama yang dibaiki mungkin mendedahkan koma di belakang yang lain dalam bekas kemudian.

ToolAcre mengecilkan tanggungjawab: JSON.parse memutuskan bahawa dokumen itu tidak sah dan pengimbas setempat membekalkan sebab struktur yang stabil serta baris dan lajur selepas kegagalan. Gunakan koordinat itu untuk memeriksa konteks penghurai dan bukannya menyalahkan watak yang diserlahkan secara berasingan. Koma di belakang ialah pengeditan satu aksara, tetapi memahami sebab ralat muncul pada pembatas berikut menjadikan diagnosis yang sama boleh dipercayai merentas objek, tatasusunan dan konfigurasi bersarang dalam.