Tu je môj reťazec
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Tu správa obsahuje jednoduché úvodzovky, ktoré sú rovnaké ako úvodzovky používané v JSON. To, čo robím, je vyplnenie reťazca z používateľských vstupov, ako je správa. Takže potrebujem uniknúť takýmto špeciálnym scenárom, ktoré narúšajú kód. Existuje však nejaký iný spôsob ako nahradiť reťazec, ako ich escapovať, ale zároveň umožniť, aby ich HTML spracovalo späť do správnej správy?
Reťazec JSON musí byť podľa špecifikácií dvojcitovaný, takže nemusíte používať escape '
.
Ak musíte v reťazci JSON použiť špeciálny znak, môžete ho uniknúť pomocou znaku \
.
Pozrite si tento zoznam špeciálnych znakov používaných 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
Avšak aj keď je to úplne v rozpore so špecifikáciou, autor by mohol použiť \'
.
To je zlé, pretože :
Pre nových čitateľov, vždy používajte dvojité úvodzovky pre reťazce json.
Všetci hovoria o tom, ako uniknúť '
v '
citovanom reťazcovom literáli. Je tu však oveľa väčší problém: reťazcové literály s jednoduchými úvodzovkami nie sú platným JSON. JSON je založený na JavaScripte, ale nie je to to isté. Ak zapisujete objektový literál vnútri kódu JavaScriptu, v poriadku; ak skutočne potrebujete JSON, musíte použiť "
.
V prípade reťazcov s dvojitými úvodzovkami nebudete potrebovať escape '
. (A ak by ste predsa len chceli v reťazci literál "
, použili by ste \"
.)
k príspevku AlexB's:
\' Apostrophe or single quote
\" Double quote
escapovanie jednoduchých úvodzoviek je platné len v reťazcoch json s jednoduchými úvodzovkami
escapovanie dvojitých úvodzoviek je platné len v reťazcoch json s dvojitými úvodzovkami
príklad:
'Bart\'s car' -> valid
'Bart says \"Hi\"' -> invalid