SORU
16 ŞUBAT 2010, Salı


JSON yanıt olarak bir WordPress kullanmak tek tırnak

Benim server jQuery.post() ve benim sunucu JSON nesneleri ({ "var": "value", ... }. gibi dönüyor kullanarak isteklerini yapıyorum Eğer değerlerden herhangi bir tek tırnak içeriyorsa ancak, (düzgün \' gibi kaçtı), DV aksi halde geçerli bir JSON dizesini ayrıştırmak için başarısız olur. Burada ne demek istediğimi bir örnek (Konsolun Krom bitmiş):

Chrome Console

Bu normal mi? Düzgün JSON üzerinden tek bir alıntı geçmenin bir yolu var mı?

CEVAP
16 ŞUBAT 2010, Salı


Bu devlet makinesi şemasına göre JSON website, sadece kaçan çift tırnak izin verilen karakterler, tek tırnak değil. Tek tırnak karakterleri kaçtı olması gerekmez:

http://www.json.org/string.gif

< / ^ br . Güncelleme- İlgilenenler için: daha fazla bilgi

< / ^ hr .

Douglas Crockford özellikle JSON şartname dizeler içinde tek tırnak kaçtı izin vermiyor neden demiyor. Ancak, Appendix E of JavaScript: The Good Parts, JSON " tartışmaları sırasında yazdığı

JSON tasarım hedefleri minimal, taşınabilir, ve JavaScript bir alt metin vardı. Daha az çalışma için üzerinde anlaşmaya ihtiyacımız var, daha kolay bir şekilde birlikte olabiliriz.

Belki de sadece bu dizeleri tüm JSON uygulamaları kabul etmek zorunda olduğu bir kural daha az olduğu için çift tırnak kullanarak belirlenmesine izin vermeye karar verdi. Sonuç olarak, tanımı gereği tek bir dize çift tırnak karakteri ile sona erdirilebilir çünkü bir dize içinde tek tırnak karakteri yanlışlıkla dize sona erdirmek için mümkün değildir. Dolayısıyla orada biçimsel belirtimi tek tırnak karakteri kaçmasına izin vermek gerek.

< / ^ hr . Kazma uygulama Java için daha fazla caizdir . biraz org.json daha Crockford ^em>yoktek tırnak karakterleri izin:

Metinler olabilirdi yöntemleri tarafından üretilen kesinlikle JSON sözdizimi kurallarına uyar. Kurucular kabul edecekler metinlerde: daha bağışlayıcı

...

  • Dizeleri ile alıntı yapılabilir ' (tek tırnak).

Bu JSONTokener kaynak kodu ile teyit edilir. nextString yöntemi kaçtı tek tırnak karakterleri kabul eder ve çift tırnak karakterleri gibi davranır:

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 en bilgilendirici bir yorum:

Resmi JSON formatı tek tırnak dizeleri izin vermiyor, ama bir uygulama onları kabul etmek için izin verilir.

Bazı uygulamalar tek tırnak kabul eder ama bu güvenmemelisiniz. Birçok popüler uygulamaları bu konuda oldukça kısıtlayıcı ve tek tırnaklı dizeleri içeren ve/veya tek tırnaklı / kaçan JSON reddeder.

< / ^ hr .

Son olarak kravat bu, özgün soru jQuery.parseJSON ilk denemeler için kullanmak tarayıcının yerel JSON ayrıştırıcı ya da bir dolu kütüphane gibi json2.js varsa (bir yan not kütüphane jQuery mantık üzerine kurulu, eğer JSON tanımlı değildir). Böylece jQuery, yalnızca temel uygulama olarak müsamahakar olabilir:

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 );
},

Bu uygulamaları sadece resmi JSON şartname ve tek tırnak kabul etmeyin uygun bildiğim kadarıyla, bu yüzden de bir WordPress kullanmak yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CodingMadeEasy

    CodingMadeEa

    25 EYLÜL 2010
  • Lamborghini

    Lamborghini

    13 Aralık 2005
  • makemebad35

    makemebad35

    17 NİSAN 2006