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?
String JSON harus dikutip ganda, sesuai dengan spesifikasi , sehingga Anda tidak perlu keluar dari '
.
Jika Anda harus menggunakan karakter khusus dalam string JSON Anda, Anda dapat menghindarinya menggunakan karakter \
.
Lihat daftar karakter khusus ini yang digunakan dalam JSON:
\b Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\" Double quote
\\ Backslash character
Namun, bahkan jika itu benar-benar bertentangan dengan spec, penulis dapat menggunakan \'
.
Ini buruk karena:
Tapi itu berfungsi, seperti yang Anda inginkan atau tidak.
Untuk pembaca baru, selalu gunakan tanda kutip ganda untuk string json Anda.
Saya terkejut dengan adanya informasi yang salah tentang topik yang sangat banyak dilihat tentang topik dasar.
String JSON tidak dapat dikutip dengan tanda kutip tunggal. Berbagai versi spesifikasi ( asli oleh Douglas Crockford, versi ECMA , dan versi IETF ) semua menyatakan bahwa string harus dikutip dengan tanda kutip ganda. Ini bukan masalah teoritis, atau masalah pendapat seperti yang diterima oleh jawaban saat ini; setiap parser JSON di dunia nyata akan kesalahan jika Anda mencoba untuk menguraikan string yang dikutip tunggal.
Versi Crockford dan ECMA bahkan menampilkan definisi string menggunakan gambar yang cantik, yang seharusnya membuat titik jelas jelas:
Gambar cantik juga mencantumkan semua urutan pelarian yang sah dalam string JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
diikuti oleh empat-hex-digitPerhatikan bahwa, berbeda dengan omong kosong dalam beberapa jawaban lain di sini, \'
tidak pernah merupakan urutan pelarian yang valid dalam string JSON. Tidak harus demikian, karena string JSON selalu dikutip ganda.
Akhirnya, Anda seharusnya tidak perlu memikirkan untuk melarikan diri karakter sendiri ketika secara terprogram menghasilkan JSON (meskipun tentu saja Anda akan ketika mengedit secara manual, 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 seperti itu mungkin dibangun ke dalam bahasa apa pun yang Anda gunakan, seperti JavaScript JSON.stringify
, PHP's json_encode
, atau Python json.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 bahasa atau fungsi 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.
Semua orang berbicara tentang cara melepaskan '
dalam string literal '
- yang dikutip. Ada masalah yang jauh lebih besar di sini: string liter yang dikutip tunggal 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 menggunakan "
.
Dengan string yang dikutip ganda, Anda tidak perlu keluar dari '
. (Dan jika Anda ingin "
literal dalam string, Anda akan menggunakan \"
.)
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:
var d = {
name: 'whatever',
address: 'whatever',
DOB: '01/01/2001'
}
$.ajax({
type: "POST",
url: 'some/url',
dataType: 'json',
data: JSON.stringify(d),
...
}
Ini akan keluar dari karakter untuk Anda.
Ini juga disarankan oleh Mark Amery, Jawaban yang bagus BTW
Semoga ini bisa membantu seseorang.
Mungkin saya terlambat ke pesta tetapi ini akan mengurai/melarikan diri kutipan tunggal (tidak ingin terlibat dalam pertempuran parse vs melarikan diri) ..
JSON.parse("\"'\"")
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 untuk kita.
Mengganti setiap "dengan \" BUKAN CUKUP: Pengguna dapat memasukkan input:\ Dan mengurai, sekali lagi, gagal (pikirkan alasannya).
Sebagai gantinya, pertama-tama ganti setiap\dengan\(double backslash) . Hanya kemudian, ganti masing-masing "dengan \" (backslash diikuti oleh ").
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
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.