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
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 disisipkan ke JSON; balik arah dan teks ter-escape menjadi terbaca lagi.
Arah kedua adalah yang biasanya membawa orang ke sini: sebaris log, pesan galat, atau respons curl yang kembali tampak seperti dinding garis miring terbalik. Semuanya berjalan di peramban Anda, yang penting ketika payload yang Anda coba baca adalah respons produksi.
Urutan escape
JSON mendefinisikan 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.
- \" — kutip ganda, yang kalau dibiarkan akan mengakhiri string.
- \\ — 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.
- \/ — escape opsional untuk garis miring maju. Valid, tak pernah disyaratkan; alat ini menerimanya dan tak pernah menghasilkannya.
- \uXXXX — karakter apa pun lewat 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 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 ditambahkan 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 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
Nilai string JSON lengkap menyertakan kutip ganda pengapit. Tetapi biasanya Anda menempel ke 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 nilai yang bisa Anda tempel utuh.
Pendekodean tak butuh pilihan semacam itu — ia menerima kedua bentuk. Tempel fragmen atau tempel nilai berkutip penuh langsung dari 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. 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 di 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 escape \u yang kehilangan separuh digitnya. Ketimbang meneruskannya tanpa perubahan dan mengembalikan 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: \q tersasar biasanya berarti teksnya tak pernah di-escape untuk JSON sejak awal, dan \u yang terpotong biasanya berarti masukannya terpangkas — 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 kali dijalankan membuang persis satu lapisan — sampai teksnya terbaca normal.
- Apakah saya sebaiknya menyalakan kutip pengapit?
- Hanya jika Anda menginginkan nilai JSON lengkap untuk ditempel apa adanya, misalnya sebagai seluruh sisi kanan kunci. Jika Anda menempel ke 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 pada ASCII polos; emoji lalu ditulis sebagai dua escape surogat yang disyaratkan.
- Apa arti "urutan escape tak valid"?
- Masukan mengandung garis miring terbalik diikuti sesuatu yang tak didefinisikan JSON, seperti \q, atau \u tanpa empat digit heksadesimal setelahnya. Posisinya dilaporkan sehingga Anda bisa melihat titik itu: biasanya teksnya tak di-escape untuk JSON sejak awal, atau ia terpotong di tengah jalan.
- Apakah teks saya dikirim ke server?
- Tidak. Escape dan pendekodean keduanya berjalan sepenuhnya di peramban Anda, jadi token, payload, dan baris log tak pernah meninggalkan perangkat Anda.
Alat terkait
- Pemformat JSON
Validasi dan percantik JSON, dengan lokasi galat yang jelas.
- Pengode / pendekode entitas HTML
Escape teks untuk HTML, atau ubah entitas kembali menjadi karakter.
- Generator Data URI
Ubah berkas atau teks menjadi data: URI, dan baca kembali satu.
- Base64
Kodekan dan dekode Base64 — dukungan UTF-8 penuh.