【问题标题】:JSON.parse string with single and double quotes?带单引号和双引号的 JSON.parse 字符串?
【发布时间】: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 字符串,而不是简单的数组字面量?
  • 请看我的编辑。

标签: javascript json escaping


【解决方案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。

【讨论】:

【解决方案2】:

你可以像逃避它一样

 var r = JSON.parse('[["",null,null,null,null,null,"","","<span onclick=insertRow()><i class=\'fa fa- plus - circle fa- lg\'></i></span>"]]');

【讨论】:

  • 如果我在保存之前这样做,再次加载时 \ 就消失了。请查看我的编辑问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多