Je reçois une réponse JSON dans une requête Ajax du serveur. De cette façon ça marche:
{"a": "1", "b": "bonjour 'minou'"}
Mais je n’ai pas réussi à mettre des guillemets doubles autour de minou .
Lorsque je convertis "en\x22 dans la réponse Ajax, il est toujours interprété comme" par JavaScript et je ne peux pas analyser le JSON.
Dois-je également échapper à la\et à l'évasion plus tard (ce qui serait possible)?
Comment faire ça?
Edit: Je ne sais pas si je l'ai bien exprimé: je veux cette chaîne à l'intérieur de "b" après l'analyse:
hello Kitty"
Si nécessaire, je pourrais aussi ajouter une étape supplémentaire après l'analyse pour convertir "b", mais je suppose que ce n'est pas nécessaire, il existe un moyen plus élégant, ce qui se produit automatiquement?
Edit2: La page ajax est générée par php. J'ai essayé plusieurs choses maintenant pour créer la valeur de b, toutes résultent en une erreur d'analyse JSON sur la page:
$b = 'hello "kitty"';
// no 1:
//$b = str_replace('"',"\x22",$b);
// or no 2:
// $b = addslashes($b);
// or no 3:
$b = str_replace('"','\"',$b);
echo '{ "a" : "1", "b" : "' . $b . '"}';
Edit3: Cette solution fonctionne enfin:
$b = 'hello "kitty"';
$b = str_replace('"','\\"',$b);
echo '{ "a" : "1", "b" : "' . $b . '"}';
Il suffit d’échapper avec une barre oblique inverse:
> JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'})
{"a":5,"b":"a \"kitty\" mighty odd"}
> JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}')
Object
a: 5
b: a "kitty" mighty odd
__proto__: Object
Les analyseurs JSON reconnaissent \"
à l'intérieur des chaînes entre guillemets doubles. Notez que dans le deuxième exemple, la double barre oblique inversée est nécessaire car il existe une passe d'analyse Javascript, puis une autre passe d'analyse JSON.
utilisez seulement json_encode (n'importe quel élément PHP), il sera automatiquement analysé.
Un peu hors sujet, vous pourriez utiliser JavaScript/NodeJS sur votre serveur et utiliser les littéraux de modèle ES6 (les backticks "utilisés autour de" Christian "), mais 7 ans plus tard, vous utilisez probablement déjà NodeJS :)
var myJSON = {
"name": {
"first": `"Christian"`,
"last": "Broberg"
},
"age": 49,
"skills": [ "JavaScript", "React", "NodeJS" ],
"married": false,
"superpowers": null
}