Berikut adalah string
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Berikut pesan yang berisi tanda kutip tunggal, yang adalah sama seperti kutipan yang digunakan dalam JSON. Apa yang saya lakukan adalah mengisi string dari input pengguna seperti pesan. Jadi, saya perlu untuk melarikan diri orang-orang semacam skenario khusus yang melanggar kode etik. Tapi selain mengganti string, apakah ada cara untuk membuat mereka melarikan diri tetapi masih memungkinkan HTML untuk proses mereka kembali ke pesan yang benar?
I'm terkejut dengan kehadiran yang sangat-upvoted informasi yang keliru seperti itu sangat dipandang pertanyaan tentang topik dasar.
JSON string tidak dapat dikutip dengan tanda kutip tunggal. Berbagai versi dari spec (asli oleh Douglas Crockford, ECMA version, dan IETF version) menyatakan bahwa string harus dikutip dengan tanda kutip ganda. Ini bukan masalah teoritis, maupun masalah pendapat sebagai jawaban yang diterima saat ini menunjukkan, setiap JSON parser di dunia nyata akan kesalahan jika anda mencoba untuk mengurai single-quoted string.
Crockford's dan ECMA's versi bahkan menampilkan definisi dari sebuah string menggunakan gambar yang cukup, yang harus membuat titik yang jelas jelas:
Gambar cantik juga daftar semua sah escape sequences dalam string JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
diikuti oleh empat-hex-digitPerhatikan bahwa, bertentangan dengan omong kosong dalam beberapa jawaban yang lain di sini, \'
tidak pernah berlaku urutan escape di JSON string. Itu doesn't perlu, karena JSON string selalu double-quoted.
Akhirnya, anda seharusnya't biasanya harus berpikir tentang melarikan diri karakter diri sendiri ketika programatik menghasilkan JSON (meskipun tentu saja anda akan ketika mengedit secara manual, mengatakan, JSON berbasis file konfigurasi). Sebaliknya, bentuk struktur data yang anda inginkan untuk encode menggunakan fasilitas peta asli, array, string, number, boolean dan null jenis bahasa anda, dan kemudian menyalinnya ke JSON dengan JSON-encoding fungsi. Fungsi seperti ini mungkin dibangun ke dalam bahasa apapun yang anda're menggunakan, seperti JavaScript's JSON.stringify
, PHP's json_encode
, atau Python's json.kesedihan
. Jika anda're menggunakan bahasa yang doesn't memiliki fungsi seperti built-in, anda mungkin dapat menemukan sebuah JSON parsing dan pengkodean perpustakaan untuk digunakan. Jika anda hanya menggunakan bahasa atau fungsi perpustakaan untuk mengubah hal-hal untuk dan dari JSON, anda'll bahkan tidak pernah perlu tahu JSON's melarikan diri aturan. Ini adalah apa yang sesat pertanyaan penanya di sini seharusnya dilakukan.
String JSON harus double-quoted, menurut spesifikasi, sehingga anda don't perlu untuk melarikan diri '
.
Jika anda harus menggunakan karakter khusus dalam string JSON, anda dapat melarikan diri itu menggunakan \
karakter.
Melihat ini daftar karakter khusus 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 bisa menggunakan \'
.
Ini adalah buruk karena :
Untuk pembaca baru, selalu menggunakan tanda kutip ganda untuk anda json string.
Semua orang berbicara tentang bagaimana untuk melarikan diri '
dalam '
-dikutip string literal. Ada's jauh lebih besar masalah berikut: single-quoted string literal aren't berlaku JSON. JSON adalah berdasarkan JavaScript, tapi itu's bukan hal yang sama. Jika anda're menulis sebuah objek literal di dalam kode JavaScript, baik-baik saja; jika anda benar-benar perlu JSON, anda perlu menggunakan "
.
Dengan double-quoted string, anda memenangkan't perlu untuk melarikan diri '
. (Dan jika anda tidak ingin literal "
dalam string, you'd gunakan \"
.)
Sebagian besar jawaban salah tidak menjawab pertanyaan atau tidak perlu panjang dalam penjelasan.
OK jadi JSON hanya menggunakan tanda kutip ganda, kita mendapatkan itu!
Saya mencoba untuk menggunakan JQuery AJAX untuk posting JSON data ke server dan kemudian kembali informasi yang sama. Solusi terbaik untuk memposting pertanyaan 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 melarikan diri karakter untuk anda.
Hal ini juga disarankan oleh Mark Amery, jawaban BTW
Semoga ini bisa membantu seseorang.
Untuk memungkinkan tanda kutip tunggal dalam doubule dikutip string untuk tujuan json, anda dua kali lipat kutip tunggal. {"X": "Apa's pertanyaan"} ==> {"X": "Apa''s pertanyaan"}
https://codereview.stackexchange.com/questions/69266/json-conversion-to-single-quotes
The \' urutan adalah tidak valid.
Gunakan encodeURIComponent() untuk mengkodekan string.
Misalnya. var product_list = encodeURIComponent(JSON.stringify(product_list));
Anda don't perlu untuk memecahkan kode itu sejak web server secara otomatis melakukan hal yang sama.
Jawaban pertanyaan langsung:
Untuk amannya, ganti diperlukan karakter dengan \u+4-digit-hex-nilai
Contoh:
Jika anda ingin melarikan diri apostrophe ' ganti dengan \u0027
D'Amico menjadi D\u0027Amico
BAGUS UNTUK REFERENSI: http://es5.github.io/x7.html#x7.8.4
Saya pikir kita semua setuju tunggal dikutip jsons aren't real jsons. Jadilah bahwa sebagai mungkin, kita masih perlu untuk menjawab pertanyaan tersebut melarikan diri " hanya double quoted string json, dalam ketiadaan perpustakaan untuk melakukannya bagi kita.
Mengganti masing-masing " dengan \" TIDAK CUKUP: User bisa memasukkan input: \ dan parsing, lagi-lagi, gagal (berpikir mengapa).
Sebaliknya, pertama ganti masing-masing \ dengan \ (double backslash). Hanya kemudian, ganti masing-masing " dengan \" (backslash diikuti oleh ").
mengenai AlexB's post:
\' Apostrophe or single quote
\" Double quote
melarikan diri tanda kutip tunggal hanya berlaku di tunggal dikutip json string
melarikan diri tanda kutip ganda hanya berlaku di double quoted string json
contoh:
'Bart\'s car' -> valid
'Bart says \"Hi\"' -> invalid