【问题标题】:escape with JSON.parse()用 JSON.parse() 转义
【发布时间】:2017-02-15 16:38:43
【问题描述】:

我正在尝试在 javascript php 通信中应用一个简单的转义过程。我不工作...我不知道为什么。

这是我写的一些测试代码:

<head>
    <meta charset='utf-8'>
    <title>Test</title>
</head>

<body>
    <script>
        JSON.parse('[{"id":"43","english":"ar\"m","korean":"\ud314","date":"49 minute(s) ago."}]');
    </script>
</body>

</html>

转义字符是单词 arm 内的双引号。 打开页面时返回的错误是:

VM84:1 Uncaught SyntaxError: Unexpected token m in JSON at position 26
     at JSON.parse (<anonymous>)
    at test.html:11
(anonymous) @ test.html:11

【问题讨论】:

  • 不清楚这个实验的意义何在。如果服务器发送的 JSON 有问题,那么问题就在那里。

标签: javascript json escaping


【解决方案1】:

当您将 JSON 字符串作为字符串包含在 JavaScript 中时,您必须将反斜杠加倍,因为反斜杠在 JavaScript 和 JSON 语法中都是元字符。

    JSON.parse('[{"id":"43","english":"ar\\\"m","korean":"\\ud314","date":"49 minute(s) ago."}]');

对于\",必须使用三个 \ 字符,这样当JSON 解析器看到它时,您就有\"

请注意,在您的服务器发送给客户端(或客户端发送给服务器)的实际 JSON 中不需要有那些额外的\ )。

请注意,将 JSON 文本作为 JavaScript 字符串常量嵌入到 JavaScript 源代码中的理由并不多。如果您使用像 PHP(或几乎任何东西)这样的服务器端工具将 JavaScript 源代码构建为 HTML 文档的一部分,那么 JSON 可以作为普通的 JavaScript 对象初始化器放入 JavaScript 源代码中,而无需额外的引号层让它看起来像一个 JavaScript 字符串常量。

【讨论】:

  • 对我来说真的不起作用,因为我正在解析来自数据库的东西
  • @Antoine 如果您从服务器获取字符串,那么您一开始就没有问题。这个问题是关于在 JavaScript 源代码中嵌入 作为字符串 的 JSON 字符串。这本身就是一个非常奇怪的情况,因为 JSON 语法可以直接由 JavaScript 解析器解析,所以通常根本不需要它在 JavaScript 字符串常量中。
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多