Alat pembangun · JSON pemformat & pengesah
Mengapa fail JSON Lines gagal pengesahan pada baris 2, lajur 1
· Bagaimana ia berfungsi
json aliran kerja pembangun pengesahan
Fail .jsonl ialah banyak dokumen JSON, bukan satu, jadi pengesah yang ketat berhenti tepat di tempat yang kedua bermula. Siaran ini menerangkan konvensyen JSON Lines dan NDJSON dan cara mengesahkannya satu rekod pada satu masa.
Sah pada setiap baris, tidak sah sebagai fail
Sah pada setiap baris, tidak sah sebagai fail — eksport yang setiap alat hiliran membaca dengan gembira tetapi pengesah menolak pada baris kedua. Pengirim log boleh menggunakan setiap baris baharu sebagai sempadan rekod, namun penghurai JSON yang ketat melihat keseluruhan fail sebagai satu input. Objek pertama lengkap JSON; pendakap bukaan seterusnya ialah nilai punca kedua yang tidak sah.
ToolAcre mengesahkan satu JSON teks, bukan JSON Baris. Selepas pengimbas melengkapkan nilai punca pertama, sebarang aksara bukan ruang kosong kemudiannya dilaporkan sebagai tidak dijangka selepas tamat nilai JSON. Ia tidak menawarkan pengesahan atau penukaran setiap baris NDJSON sebagai sandaran tersembunyi. Perbezaan itu menghalang keputusan hijau daripada membayangkan bahawa setiap rekod dalam aliran berorientasikan baris telah diperiksa.
Satu teks, satu nilai — apa yang RFC 8259 takrifkan sebagai teks JSON dan sebab dua nilai peringkat atas berturut-turut adalah ralat tatabahasa
Satu teks, satu nilai — apa yang RFC 8259 takrifkan sebagai teks JSON dan sebab dua nilai peringkat atas berturut-turut adalah ralat tatabahasa. Teks JSON ialah nilai bersiri, jadi objek, tatasusunan, rentetan, nombor, boolean atau null boleh berdiri di akar. Ruang kosong mungkin mengelilingi nilai itu, tetapi ia tidak boleh memisahkan beberapa punca menjadi dokumen sah yang lebih besar.
Contohnya, `{"ok":true} {"ok":false}` mengandungi dua objek yang masing-masing sah tetapi bukan satu teks JSON. Menghuraikan objek pertama menggunakan satu nilai lengkap; menghuraikan seluruh rentetan kemudian mesti menolak `{` kedua. Untuk mewakili kedua-dua nilai dalam JSON biasa, letakkan kedua-duanya dalam tatasusunan dan tambahkan koma yang diperlukan antara unsur tatasusunan.
JSON Garisan dan NDJSON
JSON Garisan dan NDJSON — konvensyen dibatasi baris baharu, sebab ia wujud untuk penstriman dan log, dan cara ia berbeza daripada tatasusunan JSON. Setiap baris fizikal membawa satu nilai JSON yang lengkap, biasanya objek, dan baris baharu bertindak sebagai pembingkai di luar tatabahasa JSON. Pengeluar boleh menambah rekod dan pengguna boleh memprosesnya secara berperingkat tanpa memuatkan koleksi lengkap.
Tatasusunan sebaliknya mempunyai satu kurungan pembuka, elemen dipisahkan koma dan satu kurungan penutup, menjadikan keseluruhan fail satu nilai JSON. Ia mudah untuk API yang mengembalikan koleksi terhad tetapi janggal untuk aliran acara yang berkembang tanpa had. Fail JSON Lines yang dipotong boleh mengekalkan semua rekod terdahulu yang lengkap; tatasusunan terpenggal biasanya meninggalkan nilai yang disertakan tidak selesai.
Mengapa ralat sentiasa berada di baris 2, lajur 1
Mengapa ralat sentiasa berada pada baris 2, lajur 1 — penghurai menamatkan nilai pertama, menjangkakan tamat input dan memenuhi aksara pertama rekod kedua. Baris baharu itu sendiri adalah sah mengekori ruang kosong, jadi ia tidak mencetuskan kegagalan. Pendakap pembukaan rekod seterusnya ialah token pertama yang bercanggah dengan keadaan dokumen lengkap.
Lokasi itu adalah bukti diagnostik dan bukannya dakwaan bahawa objek kedua adalah salah bentuk. Jika laporan secara konsisten menunjuk kepada aksara bukan ruang kosong pertama selepas akar yang sah, periksa bentuk fail sebelum mengedit tanda baca. Memadamkan pendakap akan merosakkan rekod; memilih pembaca sedar baris atau menukar rekod menjadi tatasusunan menangani ketidakpadanan pembingkaian sebenar.
Contoh yang berfungsi: mengesahkan tiga rekod log
Contoh yang berjaya: mengesahkan tiga rekod log — menyemak setiap baris sendiri berbanding membungkusnya dalam tatasusunan dengan koma. Katakan garisan mengandungi `{"level":"info"}`, `{"level":"warn"}` dan `{"level":"error"}`. Pengesah berorientasikan baris menghuraikan tiga input yang berasingan dan boleh mengenal pasti rekod yang tepat jika seseorang mempunyai petikan yang hilang atau koma di belakang.
Untuk pemeriksaan keseluruhan dokumen yang ketat, tukar sampel kepada `[{"level":"info"},{"level":"warn"},{"level":"error"}]`. Tanda kurung membentuk satu punca dan koma mengehadkan unsurnya. Jangan sahaja menggantikan baris baharu dengan koma: yang menghasilkan tiga punca yang dipisahkan dengan tanda baca melainkan tatasusunan sekeliling ditambahkan, dan ia boleh salah mengendalikan baris kosong yang konvensyen sumber mungkin melarang atau mengabaikan.
Menukar antara dua bentuk
Menukar antara dua bentuk — apabila tatasusunan pembalut sesuai dan bila ia akan mengalahkan titik keluaran yang dibatasi garis. Eksport terhingga bertujuan untuk permintaan API, editor atau pengesah yang ketat selalunya boleh menjadi tatasusunan. Penukaran mesti menghuraikan setiap rekod terlebih dahulu, kerana penggabungan teks tidak boleh mengambil kira aksara yang dilepaskan terbenam atau baris tidak sah dengan selamat.
Kekalkan JSON Talian apabila rekod tiba secara berterusan, fail dilampirkan atau pengguna memerlukan memori terhad dan pemulihan tahap rekod. Menukar strim acara berbilang gigabait kepada satu tatasusunan memerlukan mengekalkan keadaan bekas dan menangguhkan penghuraian lengkap sehingga kurungan penutup tiba. Dalam arah lain, sirikan setiap elemen tatasusunan secara padat pada satu baris dan tentukan sama ada baris kosong atau baris baharu akhir dibenarkan.
Perkara ini tidak meliputi
Perkara yang tidak dilindungi ini — digabungkan JSON tanpa baris baharu dan pembingkaian pemisah rekod (RFC 7464), yang memerlukan penghurai khusus. Nilai yang diletakkan secara langsung tidak boleh dipisahkan dengan selamat dengan operasi talian yang mudah, terutamanya apabila punca mungkin nombor atau rentetan. RFC 7464 menggunakan aksara pemisah rekod ASCII untuk membingkai urutan teks JSON dan bukannya sahaja bergantung pada baris baharu yang boleh dilihat.
Ia juga tidak mengesahkan peraturan aplikasi yang dikongsi oleh rekod. Menghuraikan setiap baris tidak dapat membuktikan cap masa disusun, pengecam adalah unik atau semua objek menggunakan skema yang sama. Semakan tersebut tergolong selepas pembingkaian rekod dan penghuraian sintaks. Begitu juga, baris baharu dibenamkan sebagai urutan pelarian ` ` di dalam rentetan ialah data, bukan sempadan fizikal dan pembaca baris yang mematuhi mesti mengekalkan perbezaan itu.
Bawa pulang: ketahui bentuk yang anda pegang
Bawa pulang: ketahui bentuk yang anda pegang — dan cara kedudukan pengesah memberitahu anda serta-merta bahawa fail dibatasi baris. Kegagalan pada tanda pertama baris dua selepas nilai baris-satu yang lengkap menunjukkan berbilang rekod berbingkai, bukan sintaks yang rosak dalam rekod pertama. Semak sambungan, dokumentasi pengeluar dan pengguna yang dijangkakan sebelum menukar data.
Gunakan penghurai JSON Lines atau NDJSON untuk mengesahkan rekod secara bebas apabila baris baharu itu disengajakan. Gunakan tatasusunan apabila destinasi memerlukan satu koleksi JSON yang lengkap. ToolAcre dengan betul menolak fail berbilang akar kerana kontraknya adalah pengesahan teks tunggal yang ketat; penolakan melindungi kontrak itu dan bukannya menunjukkan bahawa JSON yang dibatasi baris baharu secara semula jadi rosak. Padankan pengesah dengan format pembingkaian.