更新时间:2023-11-04 22:16:52
只是一个反斜杠转义:
> JSON.stringify({A:5,B:是小鹰威猛奇'})
{一:5,B:一个\小鹰\威猛奇}
> JSON.parse({一:5,B:一个\\猫咪\\威猛奇})
目的
答:5
B:小猫咪威猛奇
__proto__:对象
JSON解析器识别 \
里面的双引号的字符串作为一个双引号,需要注意的是,在第二个例子中,双反斜线是必要的,因为有一个Javascript解析器通,然后又JSON解析器通。
I receive a JSON response in an Ajax request from the server. This way it works:
{ "a" : "1", "b" : "hello 'kitty'" }
But I did not succeed in putting double quotes around kitty.
When I convert " to \x22 in the Ajax response, it is still interpreted as " by JavaScript and I cannot parse the JSON.
Should I also escape the \ and unescape later (which would be possible)?
How to do this?
Edit: I am not sure if i expressed it well: I want this string inside of "b" after the parse:
hello "kitty"
If necessary I could also add an additional step after the parse to convert "b", but I guess it is not necessary, there is a more elegant way so this happens automatically?
Edit2: The ajax page is generated by php. I tried several things now to create the value of b, all result in JSON parse error on the 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: This solution finally works:
$b = 'hello "kitty"';
$b = str_replace('"','\\"',$b);
echo '{ "a" : "1", "b" : "' . $b . '"}';
Just escape it with a backslash:
> 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
JSON parsers recognize \"
inside double-quoted strings as a double quote. Note that in the second example, the double-backslash is needed because there's a Javascript parser pass, then another JSON parser pass.