JSON web sitesindeki durum makine şemasına göre , tek tırnak değil, yalnızca kaçan çift tırnak karakterlerine izin verilir. Tek tırnak işareti karakterlerinin kaçmasına gerek yoktur:
Güncelleme - İlgilenenler için daha fazla bilgi:
Douglas Crockford, JSON belirtiminin neden dizeler içinde kaçan tek tırnaklara izin vermediğini özellikle söylemez. Bununla birlikte, JavaScript: İyi Parçalar'ın Ek E'deki JSON tartışması sırasında şunları yazıyor:
JSON'un tasarım hedefleri minimal, taşınabilir, metinsel ve JavaScript'in bir alt kümesi olacaktı. Birlikte çalışmak için ne kadar az anlaşmaya varırsak, o kadar kolay birlikte çalışabiliriz.
Bu yüzden, belki de tüm JSON uygulamalarının üzerinde anlaşması gereken daha az bir kural olduğundan, sadece çift tırnak kullanarak dizelerin tanımlanmasına izin vermeye karar verdi. Sonuç olarak, bir dizedeki tek bir tırnak karakterinin dizeyi yanlışlıkla sonlandırması imkansızdır, çünkü tanım gereği bir dize yalnızca bir çift tırnak karakteriyle sonlandırılabilir. Bu nedenle, resmi spesifikasyonda tek bir tırnak karakterinden kaçmaya izin verilmesine gerek yoktur.
Biraz daha derin kazma, Crockford en
org.json Java için JSON uygulanması daha caizdir ve
does tek tırnak karakterleri izin:
ToString yöntemleriyle üretilen metinler JSON sözdizimi kurallarına kesinlikle uygundur. Yapıcılar kabul edecekleri metinlerde daha bağışlayıcıdır:
...
- Dizeler '(tek tırnak) ile tırnak içine alınabilir.
Bu, JSONTokener kaynak kodu tarafından onaylanır . nextString
Yöntem tek tırnak karakterleri ve sadece çift tırnak karakterleri gibi davranır onları kaçtı kabul eder:
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;
...
Yöntemin üstünde bilgilendirici bir yorum vardır:
Resmi JSON biçimi, tek tırnak içinde dizelere izin vermez, ancak bir uygulamanın bunları kabul etmesine izin verilir.
Yani bazı uygulamalar tek tırnakları kabul edecektir - ancak buna güvenmemelisiniz. Birçok popüler uygulama bu bağlamda oldukça kısıtlayıcıdır ve tek tırnaklı dizeler ve / veya kaçan tek tırnaklar içeren JSON'u reddedecektir.
Son olarak, bunu tekrar orijinal soruya bağlamak için, jQuery.parseJSON
ilk olarak tarayıcının yerel JSON ayrıştırıcısını veya json2.js gibi yüklü bir kütüphaneyi kullanmaya çalışır (eğer bir yan notta jQuery mantığının JSON
tanımlanmamışsa dayandığı kütüphanedir ) . Bu nedenle jQuery, yalnızca temeldeki uygulama kadar izin verilebilir:
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 );
},
Bildiğim kadarıyla bu uygulamalar sadece resmi JSON şartnamesine uyuyor ve tek tırnak kabul etmiyor, dolayısıyla jQuery de yok.