带单引号和双引号的 JSON.parse 字符串?
Posted
技术标签:
【中文标题】带单引号和双引号的 JSON.parse 字符串?【英文标题】:JSON.parse string with single and double quotes? 【发布时间】:2017-02-26 13:07:37 【问题描述】:我将一个数组保存为 json 并在加载时再次解析它。但是,在添加了带有单引号和双引号的 html 之后,这已经停止工作了。
我怎样才能转义引号?
JSON.parse('[["",null,null,null,null,null,"","","<span onclick=insertRow()><i class='fa fa-plus-circle fa-lg'></i></span>"]]');
uncaught SyntaxError: missing ) after argument list
编辑:
我的字符串使用 JSON.stringify 保存在数据库中。它以以下格式结束:
[["ad",null,true,false,true,false,"","","<span onclick=insertRow()><i class='fa fa-plus-circle fa-lg'></i></span>"]]
当我再次加载它时,我会这样做:
var phpsave = JSON.parse('<?php echo $result->save; ?>');
如果我在保存之前转义了单引号,则转义在加载时就会消失..
【问题讨论】:
这与 JSON 无关。这只是一个无效的字符串文字。 你是如何编码 JSON 的?你怎么加载它?你有一个问题,因为你有一个带单引号的字符串作为单引号内的 javascript 文字。我怀疑这就是您在实践中实际加载 JSON 字符串的方式! 为什么在 JS 代码中使用 JSON 字符串,而不是简单的数组字面量? 请看我的编辑。 【参考方案1】:您正在动态生成 Javascript 源代码。您需要确保您生成的内容在语法上是有效的。从 PHP 生成有效 Javascript 文字的最简单方法是使用 json_encode
:
var phpsave = JSON.parse(<?php echo json_encode($result->save); ?>);
// look ma, no quotes! ^ ^
但是等等,你不是将 JSON 传递给你的 Javascript 吗? JSON不是已经有效的Javascript吗?为什么,是的,是的。所以你可以省略这一步:
var phpsave = <?php echo $result->save; ?>;
当然,在开始输出随机 Javascript 代码之前,您可能需要确保真的首先在此处传递有效的 JSON。
【讨论】:
+1 表示正确的方法,但actually JSON isn't always valid JS。并且取决于它在哪里回显,仍然可能需要逃避诸如</script>
之类的东西。【参考方案2】:
你可以像逃避它一样
var r = JSON.parse('[["",null,null,null,null,null,"","","<span onclick=insertRow()><i class=\'fa fa- plus - circle fa- lg\'></i></span>"]]');
【讨论】:
如果我在保存之前这样做,再次加载时 \ 就消失了。请查看我的编辑问题。以上是关于带单引号和双引号的 JSON.parse 字符串?的主要内容,如果未能解决你的问题,请参考以下文章