Alat pembangun · JSON pemformat & pengesah
JSON rentetan pelepasan aksara dijelaskan: \n, \uXXXX dan aksara kawalan
· Bagaimana ia berfungsi
json aliran kerja pembangun pengesahan
Baris baharu mentah dalam rentetan JSON adalah tidak sah, begitu juga dengan tab. Siaran ini merangkumi lapan urutan pelepasan aksara, cara \u pelepasan aksara dan pasangan pengganti berfungsi, dan sebab perenggan yang ditampal boleh membatalkan keseluruhan fail.
Perenggan yang memecahkan muatan
Perenggan yang memecahkan muatan — menampal pemisah baris yang boleh dilihat ke dalam perihalan yang dipetik memasukkan aksara kawalan terus ke dalam rentetan JSON. Baris pertama kelihatan lengkap, tetapi petikan pembukaan masih mengharapkan kandungan rentetan atau petikan penutup. Apabila penghurai mencapai suapan baris mentah, ia berhenti di situ kerana rentetan JSON tidak boleh merentangi baris fizikal dengan cara itu. Teks mesti mengandungi pelarian dua aksara `\n` di mana sahaja nilai yang dinyahkod memerlukan baris baharu.
Tab yang disalin daripada dokumen atau hamparan menyebabkan kelas kegagalan yang sama, walaupun editor boleh menjadikannya sebagai jarak yang tidak berbahaya. Gantikan tab literal dengan `\t`, pemulangan gerabak dengan `\r` dan kawalan terlarang lain dengan namanya atau Unicode pelepasan aksara.
Lapan pelarian JSON membenarkan
Lapan pelepasan aksara JSON membenarkan — selepas garis miring ke belakang, bentuk pendek ialah `"`, `\\`, `\/`, `\b`, `\f`, `\n`, `\r` dan `\t`. Ia mewakili tanda petikan, garis miring, garis miring, ruang belakang, suapan borang, suapan baris, pemulangan pengangkutan dan tab mendatar. Garis miring juga mungkin kelihatan tidak dapat dielakkan; `\/` wujud terutamanya untuk keserasian dengan konteks yang pernah merawat urutan skrip penutup secara khusus.
Tiada surat lain boleh mengikuti garis serong ke belakang JSON. Urutan yang biasa daripada bahasa pengaturcaraan, seperti `\v`, `\0`, `\x41` atau garis serong ke belakang diikuti dengan baris baharu fizikal, adalah tidak sah di sini. Gunakan `\u` diikuti dengan tepat empat digit heksadesimal apabila tiada jalan keluar pendek wujud. Perbendaharaan kata tetap kecil ini mengekalkan JSON rentetan mudah alih: pengguna tidak memerlukan JavaScript, Python atau peraturan pelepasan aksara khusus shell untuk menentukan aksara yang diwakili oleh teks yang sah.
Mengapa tab literal tidak sah tetapi é literal adalah baik
Mengapa tab literal tidak sah tetapi é literal adalah baik — JSON melarang titik kod yang tidak dilepaskan daripada U+0000 melalui U+001F dalam rentetan. Julat itu mengandungi tab, baris baharu dan kawalan lain yang kesan halimunannya boleh mengganggu pembingkaian atau paparan. Huruf `é` ialah U+00E9, jauh di luar julat kawalan, jadi UTF-8 JSON boleh memasukkannya terus antara petikan. Perkara yang sama berlaku untuk kebanyakan skrip, simbol dan emoji.
Oleh itu, pelepasan aksara Unicode biasa adalah pilihan, bukan keperluan kebersihan. `"café"` dan `"caf\u00e9"` menyahkod kepada jujukan aksara yang sama. Teks langsung biasanya lebih mudah dibaca oleh orang ramai, manakala escape boleh membantu pengangkutan ASCII sahaja atau menjadikan unit kod tertentu kelihatan. Watak kawalan adalah berbeza: pelarian mereka adalah wajib.
Cara \uXXXX pelepasan aksara berfungsi
Cara `\uXXXX` pelepasan aksara berfungsi — `u` mesti diikuti dengan tepat empat digit heksadesimal, menggunakan 0–9 atau A–F dalam mana-mana kes. `\u00E9` mewakili unit kod UTF-16 untuk `é` dan `\u000A` mewakili suapan baris. Lebih sedikit digit, pendakap seperti `\u{1F600}` atau huruf bukan heksadesimal menjadikan JSON tidak sah, walaupun bahasa pengaturcaraan lain menerima tatatanda itu.
Aksara di atas U+FFFF diwakili dalam borang pelarian ini sebagai pasangan pengganti. Emoji 😀 boleh ditulis sebagai `\uD83D\uDE00`: pengganti tinggi dan rendah bergabung selepas menghuraikan satu nilai skalar Unicode. Tatabahasa JSON boleh membawa pelarian pengganti yang tidak berpasangan, tetapi pengekod dan aplikasi hiliran mungkin menolak atau menggantikannya kerana ia tidak mengenal pasti aksara Unicode yang lengkap.
Contoh yang berjaya: pelepasan aksara dari laluan Windows dan coretan HTML
Contoh yang berjaya: pelepasan aksara dari laluan Windows dan coretan HTML — laluan yang dimaksudkan `C:\Temp\report.txt` memerlukan setiap garisan belakang digandakan dalam JSON sumber: `"C:\\Temp\\report.txt"`. Tanpa menggandakan, `\T` ialah pelarian yang tidak sah dan jujukan seperti `\r` atau `\t` boleh menjadi aksara kawalan secara senyap dan bukannya pemisah laluan. Bina JSON daripada nilai yang dimaksudkan, bukan dengan meneka garis miring yang dipaparkan sudah tergolong dalam bahasa luar.
Serpihan HTML seperti `<a title="Report">Open</a>` boleh mengekalkan kurungan sudutnya dan slash secara literal, tetapi petikan atribut mesti menjadi `\"` dalam rentetan JSON. Jika baris baharu memisahkan dua teg, kodkannya sebagai `\n`. Ahli JSON yang terhasil boleh disahkan dan dihuraikan kembali kepada teks HTML asal.
Di mana pelarian menjadi dua kali ganda
Di mana pelarian menjadi dua kali ganda — setiap tatabahasa teks yang disertakan mendapat peluangnya sendiri untuk mentafsir garis miring ke belakang. Dokumen JSON yang mengandungi rentetan yang dinyahkodkan `line1\nline2` mesti terlepas daripada garis miring ke belakang itu, menghasilkan `"line1\\nline2"`. Jika teks JSON itu sendiri disimpan sebagai rentetan JSON, petikan dan kedua-dua garis miring ke belakang memerlukan satu lagi lapisan pelarian. Kekacauan yang jelas merekodkan berbilang perwakilan, bukan bentuk lanjutan khas JSON.
Cangkang dan literal bahasa pengaturcaraan menambah peraturan petikan mereka sendiri sebelum penghurai JSON melihat hujah. Diagnosis dari dalam ke luar: tulis nilai yang dinyahkodkan terlebih dahulu, kodkannya sebagai JSON sekali, kemudian kodkan teks JSON yang lengkap untuk shell atau bahasa sumber di sekelilingnya. Pada setiap sempadan, periksa bait atau aksara yang sebenarnya diterima oleh penghurai seterusnya.
Perkara ini tidak meliputi
Perkara yang tidak dilindungi ini — HTML entiti seperti `"` dan URL peratus pengekodan seperti `%20` ialah transformasi berasingan untuk konteks sintaksis yang berasingan. Penghurai JSON tidak menyahkod mana-mana bentuk. Rentetan `"""` mengandungi enam aksara literal selepas menghuraikan, bukan tanda petikan dan `"%20"` mengandungi tanda peratus diikuti dengan dua digit, bukan ruang. Gunakan pengekodan tersebut sahaja apabila data melintasi HTML atau komponen URL.
Perbincangan ini juga tidak menggantikan pengekodan output. JSON sah yang diterima daripada sumber yang tidak dipercayai masih boleh mengandungi HTML, teks seperti skrip atau urutan kawalan terminal sebagai data rentetan biasa. Aplikasi yang kemudiannya membuat atau melaksanakan perintah mesti mengendalikan destinasi itu dengan selamat. JSON pelepasan aksara melindungi struktur JSON; ia bukan sanitasi sejagat.
Bawa pulang: lari dari apa yang dilarang oleh tatabahasa, tidak lebih
Bawa pulang: lari dari apa yang dilarang oleh tatabahasa, tidak lebih — petikan berganda, garis miring ke belakang dan mata kod di bawah U+0020 memerlukan perhatian dalam rentetan JSON. Unicode Biasa boleh kekal dibaca, manakala `\uXXXX` menyediakan alternatif tepat empat digit dan pasangan pengganti mewakili aksara di atas U+FFFF. Diagnostik pada kedudukan yang nampaknya kosong selalunya mengenal pasti baris baharu literal, tab atau aksara kawalan lain yang mesti digantikan dengan pelarian teksnya.
Kira lapisan pengekodan dan bukannya mengira garis miring dengan penglihatan. Mulakan daripada nilai yang sepatutnya diterima oleh aplikasi, kodkannya sekali untuk JSON dan kemudian petik dokumen yang terhasil untuk mana-mana kulit luar, fail sumber atau rentetan JSON kedua. Sahkan teks yang dibentangkan kepada penghurai JSON dan, apabila ketepatan penting, periksa rentetan yang dinyahkodkan selepas itu.