Ini senar saya
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Di sini pesan berisi tanda kutip tunggal, yang sama dengan kutipan yang digunakan dalam JSON. Apa yang saya lakukan adalah mengisi string dari input pengguna seperti pesan. Jadi, saya perlu melarikan diri dari skenario khusus yang memecahkan kode. Tapi selain ganti string, apakah ada cara untuk membuat mereka keluar tetapi masih memungkinkan HTML untuk memprosesnya kembali ke pesan yang benar?
Jawaban:
String JSON harus dikutip ganda, sesuai dengan spesifikasi , jadi Anda tidak perlu melarikan diri
'
.Jika Anda harus menggunakan karakter khusus di string JSON Anda, Anda dapat menghindarinya menggunakan
\
karakter.Lihat daftar karakter khusus ini yang digunakan dalam JSON:
Namun, bahkan jika itu benar-benar bertentangan dengan spesifikasi, penulis dapat menggunakannya
\'
.Ini buruk karena:
Tapi itu berfungsi, seperti yang Anda inginkan atau tidak.
Untuk pembaca baru, selalu gunakan tanda kutip ganda untuk string json Anda.
sumber
JSON.parse("'foo'")
di konsol browser Anda, misalnya, dan amatiSyntaxError: Unexpected token '
. Spesifikasi JSON sangat sederhana dan jelas tentang ini. Tidak ada urutan keluar di JSON untuk tanda kutip tunggal, dan string JSON tidak dapat dikutip tunggal.'
, dengan cara yang sama secara teknis benar tetapi menyesatkan untuk mengatakan bahwa secara hukum Anda tidak perlu membunuh anak-anak. Yang lebih tepat adalah mengatakan bahwa Anda tidak dapat melarikan diri'
.\'
adalah urutan pelarian yang ilegal, dan jika Anda menggunakannya maka JSON Anda bukan JSON yang valid dan pengurai JSON mana pun akan mencekiknya. (Tentu saja JavaScriptJSON.parse
dan Pythonjson.loads
.)\'
urutan escape "berfungsi, seperti yang Anda inginkan atau tidak" . Ini salah. Saya menantang Anda untuk memamerkan parser JSON apa pun yang digunakan populer yang tidak akan tercekik pada string yang dikutip tunggal atau pada\'
urutannya. Saya sudah menunjukkan ituJSON.parse("'foo'")
danJSON.parse('"\\\'"')
(dalam JavaScript) danjson.loads("'foo'")
danjson.loads('"\\\'"')
(dalam Python) keduanya melempar pengecualian. Apa yang menjadi dasar Anda untuk klaim bahwa menggunakan konstruksi ini "bekerja"?'
sebagai\u0027
, tidak bahwa Anda dapat melarikan diri sebagai\'
.'
" (dan membandingkan tindakan seperti itu dengan pembunuhan anak-anak!) Secara teknis salah; lebih akurat adalah dengan mengatakan bahwa Anda dapat menghindarinya, hanya saja tidak seperti itu\'
. Saya tidak menyadari bahwa versi RFC dari spec merujuk pada urutan seperti\u0027
sebagai cara 'melarikan diri' karakter yang mereka wakili. Namun, poin kunci yang\'
ilegal tetap benar dan penting.Saya terkejut dengan adanya informasi yang salah tentang topik dasar.
String JSON tidak dapat dikutip dengan kutipan tunggal . Berbagai versi spesifikasi ( asli oleh Douglas Crockford, versi ECMA , dan versi IETF ) semuanya menyatakan bahwa string harus dikutip dengan tanda kutip ganda. Ini bukan masalah teoritis, atau masalah pendapat seperti yang diterima oleh jawaban saat ini; parser JSON di dunia nyata akan kesalahan jika Anda mencoba untuk menguraikan string yang dikutip tunggal.
Versi Crockford dan ECMA bahkan menampilkan definisi sebuah string menggunakan gambar yang cantik, yang seharusnya membuat poinnya jelas:
Gambar cantik ini juga mencantumkan semua urutan pelarian yang sah dalam string JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
diikuti oleh empat digit hexPerhatikan bahwa, berbeda dengan omong kosong dalam beberapa jawaban lain di sini,
\'
tidak pernah urutan pelarian yang valid dalam string JSON. Tidak harus demikian, karena string JSON selalu dikutip ganda.Akhirnya, Anda seharusnya tidak perlu berpikir tentang melarikan diri karakter diri sendiri ketika programatik menghasilkan JSON (meskipun tentu saja Anda akan ketika secara manual mengedit, katakanlah, file konfigurasi berbasis JSON). Alih-alih, bentuk struktur data yang ingin Anda enkode menggunakan jenis peta, larik, string, nomor, boolean, dan null apa pun yang dimiliki bahasa Anda, dan kemudian menyandikannya ke JSON dengan fungsi penyandian JSON. Fungsi semacam itu mungkin dibangun ke dalam bahasa apa pun yang Anda gunakan, seperti JavaScript
JSON.stringify
, PHPjson_encode
, atau Pythonjson.dumps
. Jika Anda menggunakan bahasa yang tidak memiliki fungsi seperti itu, Anda mungkin dapat menemukan parsing dan pengkodean JSON untuk digunakan. Jika Anda hanya menggunakan fungsi bahasa atau perpustakaan untuk mengonversi berbagai hal ke dan dari JSON, Anda bahkan tidak perlu tahu aturan pelarian JSON. Inilah yang seharusnya dilakukan oleh penanya yang salah arah.sumber
Semua orang berbicara tentang cara melarikan diri
'
dalam'
string literal yang dikutip. Ada masalah yang jauh lebih besar di sini: string literal yang dikutip satu kali bukan JSON yang valid . JSON didasarkan pada JavaScript, tetapi ini bukan hal yang sama. Jika Anda menulis objek literal di dalam kode JavaScript, baik; jika Anda benar-benar membutuhkan JSON, Anda perlu menggunakannya"
.Dengan string yang dikutip ganda, Anda tidak perlu melarikan diri
'
. (Dan jika Anda memang menginginkan literal"
dalam string, Anda akan menggunakannya\"
.)sumber
'
. Contoh musuh jika nilai string saya"Member's_id" : 4
, apakah Anda mengatakan itu tidak perlu melarikan diri? Rupanya saya mengalami masalah di mana itu memberikan kesalahan pengkodean yang salah: UTF-8 dan sedang dibaca sebagaiMember�s
. File json yang dihasilkan secara manual.'
dalam string JSON literal tidak boleh diloloskan. Apakah Anda menyalin-menempelnya dari suatu tempat? Mungkin itu benar-benar a\u2019
, bukan apostrof. Dugaan saya: seseorang mengetiknya ke dalam MS Word, yang mengubahnya menjadi tanda kutip karena dianggapnya yang paling tahu. Secara tata bahasa, apostrof karakter ASCII tua yang baik ('
, alias\x27
, yang kami sebut "kutipan tunggal" sampai sekarang) adalah yang Anda inginkan. Tapi akan lebih baik untuk memperbaiki masalah pengkodean karakter Anda, jika ada masalah serupa lainnya. Jadi pilih pengkodean karakter, dan gunakan untuk membaca dan menulis. Atau melarikan diri menggunakan\u
.Sebagian besar jawaban ini tidak menjawab pertanyaan atau tidak perlu lama dalam penjelasan.
OK jadi JSON hanya menggunakan tanda kutip ganda, kami mengerti!
Saya mencoba menggunakan JQuery AJAX untuk mengirim data JSON ke server dan kemudian mengembalikan informasi yang sama. Solusi terbaik untuk pertanyaan yang saya temukan adalah menggunakan:
Ini akan keluar dari karakter untuk Anda.
Ini juga disarankan oleh Mark Amery, Jawaban yang bagus BTW
Semoga ini bisa membantu seseorang.
sumber
Mungkin saya terlambat ke pesta tetapi ini akan mengurai / melarikan diri kutipan tunggal (tidak ingin terlibat dalam pertarungan parse vs melarikan diri) ..
sumber
Jawab pertanyaan langsung:
Agar aman, ganti karakter yang diperlukan dengan \ u + 4-digit-hex-value
Contoh: Jika Anda ingin lepas dari tanda kutip 'ganti dengan \ u0027
D'Amico menjadi D \ u0027Amico
REFERENSI BAGUS: http://es5.github.io/x7.html#x7.8.4
https://mathiasbynens.be/notes/javascript-escapes
sumber
\'
.Gunakan encodeURIComponent () untuk menyandikan string.
Misalnya. var product_list = encodeURIComponent (JSON.stringify (product_list));
Anda tidak perlu men-decode karena server web secara otomatis melakukan hal yang sama.
sumber
Menggunakan literal templat ...
sumber
Saya pikir kita semua setuju jsons yang dikutip tunggal bukan jsons nyata. Bagaimanapun, kita masih perlu menjawab pertanyaan untuk melarikan diri "dalam string json yang dikutip ganda, dengan tidak adanya perpustakaan untuk melakukannya bagi kita.
Mengganti setiap "dengan \" BUKAN CUKUP: Pengguna dapat memasukkan input: \ dan parsing, sekali lagi, gagal (pikirkan alasannya).
Sebagai gantinya, pertama-tama ganti setiap \ dengan \ (backslash ganda). Hanya kemudian, ganti masing-masing "dengan \" (garis miring terbalik diikuti oleh ").
sumber
Untuk mengizinkan kutipan tunggal dalam string kutipan ragu untuk tujuan json, Anda menggandakan kutipan tunggal. {"X": "Apa pertanyaannya"} ==> {"X": "Apa pertanyaannya"}
/codereview/69266/json-conversion-to-single-quotes
Urutan \ 'tidak valid.
sumber
tentang posting AlexB:
melarikan diri tanda kutip tunggal hanya berlaku dalam string json yang dikutip tunggal.
melarikan diri tanda kutip hanya berlaku dalam string json yang dikutip ganda
contoh:
sumber