我收到来自服务器的Ajax请求中的JSON响应。这样工作:
{“ a”:“ 1”,“ b”:“ hello’kitty’”}
但是我没有成功地在 kitty上加上 双引号。
当我在Ajax响应中将“转换为\ x22时,JavaScript仍将其解释为”,并且我无法解析JSON。
我是否还应该转义\并稍后转义(可能)?
这该怎么做?
编辑: 我不确定我是否表达得很好:解析 后 我想在“ b”内的此字符串:
凯蒂猫”
如果有必要,我还可以在解析后添加一个额外的步骤来转换“ b”,但是我想没有必要,有一种更优雅的方法,所以这种情况会自动发生吗?
Edit2: ajax页面由php生成。我现在尝试了几件事来创建b的值,所有这些都导致页面上的JSON解析错误:
$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: 此解决方案终于可以工作了:
$b = 'hello "kitty"'; $b = str_replace('"','\\"',$b); echo '{ "a" : "1", "b" : "' . $b . '"}';
只需使用反斜杠将其转义即可:
> 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解析器将\"双引号内的字符串识别为双引号。请注意,在第二个示例中,需要双反斜杠,因为有一个Javascript解析器传递,然后是另一个JSON解析器传递。
\"