Kako se izogniti posebnim znakom pri gradnji niza JSON?

Tukaj je moj niz

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

Tukaj sporočilo vsebuje enojno narekovaj, ki je enak kot narekovaj, uporabljen v JSON. Iz uporabniških vnosov, kot je sporočilo, napolnim niz. Zato se moram izogniti takšnim posebnim scenarijem, ki prekinejo kodo. Toda ali obstaja kakšen drug način, razen zamenjave niza, da jih pobegnemo, vendar še vedno omogočimo, da jih HTML obdela nazaj v pravilno sporočilo?

Rešitev

Niz JSON mora biti v skladu s specifikacijami dvojno citiran, zato vam ni treba izločiti '.
Če morate v nizu JSON uporabiti poseben znak, ga lahko pobegnete z uporabo znaka \.

Oglejte si ta seznam posebnih znakov, ki se uporabljajo v JSON :

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character


Vendar bi avtor lahko uporabil \', tudi če je to v popolnem nasprotju s specifikacijo.

To je slabo, ker :

  • JE v nasprotju s specifikacijami
  • Ni več veljavni niz JSON
Vendar deluje, če želite ali ne.

Za nove bralce: za svoje nize JSON vedno uporabljajte dvojne narekovaje.

Komentarji (18)

Vsi govorijo o tem, kako se izogniti ' v ' citiranem literalu niza. Gre za veliko večje vprašanje: redni zapisi nizov z enojnimi narekovaji niso veljavni JSON. JSON temelji na javascriptu, vendar to ni isto. Če pišete objektni literal znotraj kode JavaScript, v redu; če dejansko potrebujete JSON, morate uporabiti ".

Pri nizih z dvojnimi narekovaji vam ne bo treba izogibati znakov '. (In če bi želeli dobesedni " v nizu, bi uporabili \".)

Komentarji (2)

glede AlexB's post:

 \'  Apostrophe or single quote
 \"  Double quote

izogibanje enojnim narekovajom velja samo v nizih json z enojnimi narekovaji
izogibanje dvojnim narekovajom velja samo v nizih json z dvojnimi narekovaji

primer:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid
Komentarji (2)