Menurut diagram mesin negara di situs web JSON , hanya karakter tanda kutip ganda yang lolos yang diizinkan, bukan tanda kutip tunggal. Karakter kutipan tunggal tidak perlu diloloskan:
Perbarui - Informasi lebih lanjut untuk mereka yang tertarik:
Douglas Crockford tidak secara spesifik mengatakan mengapa spesifikasi JSON tidak memungkinkan tanda kutip tunggal yang lolos dalam string. Namun, selama diskusi tentang JSON dalam Lampiran E JavaScript: The Good Parts , ia menulis:
Tujuan desain JSON adalah minimal, portabel, tekstual, dan sebagian dari JavaScript. Semakin sedikit kita perlu menyetujui untuk beroperasi, semakin mudah kita dapat beroperasi.
Jadi mungkin dia memutuskan untuk hanya mengizinkan string didefinisikan menggunakan tanda kutip ganda karena ini adalah aturan yang kurang bahwa semua implementasi JSON harus setuju. Akibatnya, karakter kutipan tunggal dalam string tidak mungkin diakhiri secara tidak sengaja, karena menurut definisi string hanya dapat diakhiri oleh karakter tanda kutip ganda. Oleh karena itu tidak perlu untuk memungkinkan keluarnya karakter kutipan tunggal dalam spesifikasi formal.
Menggali sedikit lebih dalam, implementasi JSON untuk Java
org.json Crockford lebih diizinkan dan
memang memungkinkan karakter kutipan tunggal:
Teks-teks yang dihasilkan oleh metode toString benar-benar sesuai dengan aturan sintaks JSON. Konstruktor lebih memaafkan dalam teks yang akan mereka terima:
...
- String dapat dikutip dengan '(kutipan tunggal).
Ini dikonfirmasi oleh kode sumber JSONTokener . The nextString
Metode menerima suatu lolos tunggal kutipan karakter dan memperlakukan mereka seperti karakter kutip ganda:
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
Di bagian atas metode adalah komentar informatif:
Format JSON formal tidak mengizinkan string dalam tanda kutip tunggal, tetapi implementasi diizinkan untuk menerimanya.
Jadi beberapa implementasi akan menerima tanda kutip tunggal - tetapi Anda tidak harus bergantung pada ini. Banyak implementasi populer sangat membatasi dalam hal ini dan akan menolak JSON yang berisi string kutip tunggal dan / atau lolos tanda kutip tunggal.
Akhirnya untuk mengikat ini kembali ke pertanyaan awal, jQuery.parseJSON
upaya pertama untuk menggunakan parser JSON asli peramban atau pustaka yang dimuat seperti json2.js jika ada (yang pada catatan samping adalah pustaka yang menjadi dasar logika jQuery jika JSON
tidak didefinisikan) . Dengan demikian jQuery hanya bisa seizin implementasi yang mendasarinya:
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
Sejauh yang saya tahu implementasi ini hanya mematuhi spesifikasi JSON resmi dan tidak menerima tanda kutip tunggal, maka jQuery juga tidak.