Escape / unescape string JSON
Escape teks agar valid di dalam string JSON, atau dekode teks JSON ter-escape kembali ke maknanya — dengan posisi galat yang persis.
Keluaran akan muncul di sini
Apa yang dilakukan alat ini
Sebuah string JSON tak bisa mengandung kutip ganda mentah, garis miring terbalik mentah, atau pemutus baris mentah — format itu butuh karakter-karakter itu untuk menandai tempat string mulai dan berakhir. Jadi mereka ditulis sebagai urutan escape, dan alat ini mengonversi antara kedua bentuk. Tempel teks biasa dan dapatkan versi ter-escape siap dijatuhkan ke JSON; balik arah dan teks ter-escape menjadi terbaca lagi.
Arah kedua adalah yang biasanya orang datangi: sebaris log, sebuah pesan galat, atau respons curl yang kembali tampak seperti dinding garis miring terbalik. Semuanya berjalan di browser Anda, yang penting ketika payload yang Anda coba baca adalah sebuah respons produksi.
Urutan escape
JSON mendefinisikan sebuah daftar escape yang pendek, dan alat ini memakai persis daftar itu — tak ada yang lebih eksotis, karena apa pun yang lain bukan JSON yang valid.
- \" — sebuah kutip ganda, yang jika tidak akan mengakhiri string.
- \\ — sebuah garis miring terbalik tunggal. Inilah sebabnya path Windows dan pola regex menggandakan diri.
- \n dan \r — baris-baru dan carriage return.
- \t — tab. \b dan \f ada pula, untuk backspace dan form feed.
- \/ — sebuah escape opsional untuk garis miring maju. Valid, tak pernah disyaratkan; alat ini menerimanya dan tak pernah menghasilkannya.
- \uXXXX — karakter apa pun oleh kode heksadesimalnya, yang menjadi cara karakter kontrol dan apa pun di luar ASCII bisa ditulis.
Karakter kontrol — apa pun di bawah kode 32 — sama sekali tak punya bentuk harfiah di dalam sebuah string JSON, jadi mereka selalu keluar sebagai escape \uXXXX bahkan ketika Anda tak meminta keluaran ASCII.
Mengapa garis miring terbalik berlipat ganda
Alasan paling umum untuk meraih alat seperti ini adalah teks yang telah di-escape lebih dari sekali. Tiap putaran pengodean meng-escape garis miring terbalik yang diperkenalkan putaran sebelumnya, jadi satu karakter kutip menumbuhkan ekor yang makin panjang:
original He said "hi" escaped He said \"hi\" escaped x2 He said \\\"hi\\\"
Ini terjadi ketika sebuah nilai diserialkan ke JSON, JSON itu disimpan sebagai string di dalam dokumen JSON lain, dan hasilnya dicatat. Mendekode sekali membatalkan satu lapisan; jalankan lagi pada hasilnya sampai teksnya terbaca normal. Jika Anda mendekode dan keluarannya masih punya garis miring terbalik tersasar, itu lapisan tambahan sejati, bukan bug dalam konversi.
Kutip: nilai atau fragmen
Sebuah nilai string JSON lengkap menyertakan kutip ganda pengapit. Tetapi sebagian besar waktu Anda menempel ke sebuah string yang sudah ada dalam kode atau konfigurasi Anda, tempat kutip itu akan salah. Jadi escape menghasilkan konten ter-escape telanjang secara default, dan opsi "sertakan kutip pengapit" menambahkannya ketika Anda menginginkan sebuah nilai yang bisa Anda tempel utuh.
Pendekodean tak butuh pilihan semacam itu — ia menerima kedua bentuk. Tempel sebuah fragmen atau tempel nilai berkutip penuh langsung dari sebuah dokumen JSON, dan kutip pengapit dikenali dan dibuang.
Unicode, dan kapan meng-escape-nya
JSON adalah format Unicode. "שלום" dan "😀" adalah string JSON yang sangat valid persis seperti ditulis, dan membiarkannya terbaca adalah default di sini. Opsi \uXXXX ada untuk sistem yang belum menyusul: saluran log, terminal, dan pengurai lama yang mengasumsikan ASCII dan merusak apa pun yang lain.
Satu detail penting ketika opsi itu menyala. Karakter di luar rentang dasar — kebanyakan emoji — disimpan secara internal sebagai dua unit yang disebut pasangan surogat, dan format mensyaratkan kedua paruh ditulis sebagai escape terpisah. Sebuah emoji karenanya menjadi dua escape \u ketimbang satu yang lebih panjang. Alat yang salah menangani ini menghasilkan escape yang tak diterima pengurai mana pun, yang menjadi penjelasan biasa untuk emoji yang bertahan satu sistem dan rusak di berikutnya.
Ketika pendekodean gagal
Tak setiap urutan garis miring terbalik adalah escape yang valid. \q tak berarti apa pun dalam JSON, dan \u12 adalah sebuah escape \u yang kehilangan separuh digitnya. Ketimbang meneruskannya tanpa perubahan dan menyerahkan kembali keluaran yang tampak baik tetapi bukan yang dikatakan data Anda, alat ini berhenti dan melaporkan baris dan kolom persis tempat urutan buruk itu dimulai.
Dalam praktik galat itu informatif: sebuah \q tersasar biasanya berarti teksnya tak pernah di-escape-JSON sejak awal, dan sebuah \u yang terpotong biasanya berarti masukannya dipangkas pendek — sebaris log yang terpotong pada batas panjang, atau salinan yang berhenti di tengah urutan.
Pertanyaan yang sering diajukan
- Mengapa teks saya punya \\" di mana-mana?
- Ia di-escape lebih dari sekali. Tiap lintasan meng-escape garis miring terbalik lintasan sebelumnya, jadi satu kutip asli bisa berakhir didahului beberapa. Dekode berulang — tiap jalan membuang persis satu lapisan — sampai teksnya terbaca normal.
- Apakah saya sebaiknya menyalakan kutip pengapit?
- Hanya jika Anda menginginkan sebuah nilai JSON lengkap untuk ditempel apa adanya, misalnya sebagai seluruh sisi kanan sebuah kunci. Jika Anda menempel ke sebuah string yang sudah ada dalam kode Anda, biarkan mati — jika tidak Anda akan berakhir dengan kutip di dalam kutip.
- Apakah aksara Ibrani, Arab, Tionghoa, atau emoji butuh escape?
- Tidak. String JSON adalah Unicode, jadi karakter itu valid apa adanya dan tetap terbaca secara default. Nyalakan opsi \uXXXX hanya ketika sistem hilir bersikeras ASCII polos; emoji lalu ditulis sebagai dua escape surogat yang disyaratkannya.
- Apa arti "urutan escape tak valid"?
- Masukan mengandung sebuah garis miring terbalik diikuti sesuatu yang tak didefinisikan JSON, seperti \q, atau sebuah \u tanpa empat digit heksadesimal setelahnya. Posisinya dilaporkan sehingga Anda bisa melihat titik itu: biasanya teksnya tak di-escape-JSON sejak awal, atau ia terpotong di tengah jalan.
- Apakah teks saya dikirim ke mana pun?
- Tidak. Escape dan pendekodean keduanya berjalan sepenuhnya di browser Anda, jadi token, payload, dan baris log tak pernah meninggalkan perangkat Anda.