带单引号和双引号的 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。并且取决于它在哪里回显,仍然可能需要逃避诸如&lt;/script&gt;之类的东西。【参考方案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 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

使用带单引号或双引号的 strlen

print()函数与转义字符

mysql导出的SQL怎么都带双引号

请教jsonJSON.parse中双引号如何解决

如何将带单引号的字符串转换为双引号以进行 json 解析

如何将单引号 (') 捕获到 JSON.parse 的字符串中?