Aici este meu string
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Aici mesajul conține ghilimea simplă, care este aceeași ca citatul folosit în JSON. Ce vreau să faceți este să completați un șir de la utilizator intrări, cum ar fi mesaje. Deci, trebuie să scapi de fel de scenarii speciale care sparge codul. Dar altele decât șir înlocui, există vreo modalitate de a le face să scape, dar încă permite HTML pentru a le procesa înapoi la mesajul corect?
Am'm îngrozit de prezența foarte upvoted dezinformare pe astfel o foarte vizualizate întrebare despre un subiect de bază.
JSON siruri de caractere nu poate fi citat cu ghilimele simple. Diferitele versiuni ale spec (originala de către Douglas Crockford, la ECMA version, și IETF version), toate de stat, care siruri de caractere trebuie să fie citat cu ghilimele duble. Aceasta nu este o problemă teoretică, nici o chestiune de opinie ca răspunsul acceptat în prezent sugerează; orice JSON parser în lumea reală va de eroare dacă încercați să-l aibă analiza un singur șir citat.
Crockford's și ECMA's version afișa chiar definiția unui șir folosind o imagine destul de, care ar trebui să facă punct de clară, fără echivoc:
În imagine destul de, de asemenea, listează toate legitim secvențe escape într-un șir JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
urmat de patru-hex-cifreRețineți că, spre deosebire de prostii în alte raspunsuri aici, \'
nu este valabil secvență de evadare într-un șir JSON. Nu't trebuie să fie, pentru că JSON siruri de caractere sunt întotdeauna dublu-citat.
În cele din urmă, nu ar trebui't în mod normal trebuie să se gândească despre evadarea personaje-te atunci când programatic generarea JSON (deși, desigur, veți atunci când manual de editare, să zicem, un JSON fișier de configurare). În schimb, forma structura de date doriți să codifica folosind orice harta nativă, array, string, number, boolean, și nul tipuri limba ta a, și apoi se codifica la JSON cu un JSON-codare funcție. O astfel de funcție este, probabil, construit în orice limbă ai're folosind, cum ar fi JavaScript's JSON.stringify
, PHP's json_encode
, sau Python's json.haldele
. Daca're folosind un limbaj pe care nu - 't au o astfel de funcționalitate built-in, puteți găsi, probabil, un JSON parsarea și codare biblioteca pentru a utiliza. Dacă pur și simplu utilizați limba sau funcții de bibliotecă pentru a converti lucruri la și de la JSON,'ll nici nu trebuie să știe JSON's a scăpa reguli. Aceasta este ceea ce greșit întrebarea asker aici ar trebui să fi făcut.
Un șir JSON trebuie să fie dublu-citat, potrivit specificatii, astfel încât să don't nevoie pentru a scăpa '
.
Dacă trebuie să utilizați caractere speciale în șir JSON, puteți scăpa de ea folosind \
de caracter.
Consultați această listă de caractere speciale utilizate în JSON :
\b Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\" Double quote
\\ Backslash character
Cu toate acestea, chiar dacă este total contrar spec, autorul ar putea folosi \'
.
Acest lucru este rău pentru că :
Pentru noi cititorii, folosiți întotdeauna un ghilimele duble pentru json siruri de caractere.
Toată lumea vorbește despre cum să scape ' in o'
-citat string literal. Nu's o problemă mult mai mare aici: single-citat șir de caractere literale sunt't JSON valid. JSON este bazat pe JavaScript, dar's nu-i același lucru. Daca're scris un obiect literal interior cod JavaScript, bine; dacă aveți de fapt nevoie JSON, aveți nevoie pentru a folosi"`.
Cu dublu-citat siruri de caractere, ai castigat't nevoie pentru a scăpa de '
. (Și dacă vrei un literal "
în șir, ai'd folosi \"
.)
Cele mai multe dintre aceste răspunsuri, fie nu răspunde la întrebarea sau este inutil de lung în explicație.
OK deci JSON folosește numai ghilimele, am înțeles!
Am fost încercarea de a utiliza JQuery AJAX pentru a posta date JSON pentru server și apoi a reveni mai târziu că aceleași informații. Cea mai bună soluție la postat intrebarea am gasit a fost de a utiliza:
var d = {
name: 'whatever',
address: 'whatever',
DOB: '01/01/2001'
}
$.ajax({
type: "POST",
url: 'some/url',
dataType: 'json',
data: JSON.stringify(d),
...
}
Acest lucru va scăpa de caractere pentru tine.
Acest lucru a fost sugerat, de asemenea, de Mark Amery, Mare răspuns BTW
Sper că acest lucru ajută cineva.
Pentru a permite ghilimele simple în doubule șir citat în scopul de json, dubla singur citat. {"X": "Ce's întrebarea"} ==> {"X": "Ce''s întrebarea"}
https://codereview.stackexchange.com/questions/69266/json-conversion-to-single-quotes
La \' secvența este invalid.
Utilizarea encodeURIComponent() pentru a codifica șir.
De exemplu. var product_list = encodeURIComponent(JSON.stringify(product_list));
Nu't nevoie pentru a decoda deoarece serverul de web în mod automat face același lucru.
Răspunsul la întrebare directă:
Pentru a fi în siguranță, înlocuiți necesare personaj cu \u+4 cifre hex-valoarea
Exemplu:
Dacă doriți să scape de apostrof ' înlocuiți cu \u0027
D'Amico devine D\u0027Amico
FRUMOS DE REFERINȚĂ: http://es5.github.io/x7.html#x7.8.4
Cred că suntem cu toții de acord singur citat jsons nu't real jsons. Fie ca aceasta poate, încă avem nevoie pentru a aborda problema de a scăpa de " într-un dublu citat șir json, în absența unei biblioteci pentru a face acest lucru pentru noi.
Înlocuind fiecare " cu o \" NU este SUFICIENT: Utilizatorul poate introduce intrare: \ și parsarea, din nou, nu (cred că de ce).
În schimb, prima înlocuiți fiecare \ cu \ (backslash dublu). Numai atunci, înlocuiți fiecare " cu \" (backslash urmat de ").
cu privire AlexB's post:
\' Apostrophe or single quote
\" Double quote
scăpat singur citate este valabilă numai într-un singur citat json siruri de caractere
evadarea ghilimele duble este valabilă numai în dublu citat json siruri de caractere
exemplu:
'Bart\'s car' -> valid
'Bart says \"Hi\"' -> invalid