来自php json_encode的数据的javascript parse.json错误

我在将数据从 PHP 发送到 Javascript 时遇到了一个非常棘手的问题。


长话短说...我从数据库中获取一些数据,然后将所有数据都转换为 json 并将所有数据发送到一个 javascript 函数。


数据库中的一列包含如下所示的数据:


val01\test\val04

我将这些数据分配给一个数组,然后使用 json_encode 将所有内容转换为 json,如下例所示:


$result = 'val01\test\val04'; //these are the data that are get from DB

$example = ['testData' => $result];

json_encode($example);

最后我有这些数据:


{"testData":"val01\\test\\val04\\"}

现在,当我像这样将这些结果与 parse.json 一起使用时:


var json = '{"testData":"val01\\test\\val04\\"}';

obj = JSON.parse(json);

我收到一个错误:


Error: Unexpected token v in JSON at position 24

似乎斜线被错误地转义了......确保这不是我的错......我也在MDN示例页面(https://developer.mozilla.org/it/docs/Web/JavaScript)上测试了我的例子/Reference/Global_Objects/JSON/parse ) 返回相同的结果。


我怎么解决这个问题?


我不会创建自己的转义函数..从我的角度来看太危险了..我永远不知道我会在这个列中找到什么样的数据所以..有一种干净的方法来处理这个问题吗?


波斯汪
浏览 293回答 1
1回答

30秒到达战场

你似乎在做两件事:生成 JSON。将此类 JSON 插入 JavaScript 字符串文字中。请记住,JSON 不是 JavaScript。JSON 只是一种纯文本数据格式,而 JavaScript 是一种成熟的编程语言。他们经常感到困惑,因为前者的灵感来自后者的某些数据结构的语法,但这就是相似性结束的地方。处理#1 很容易:PHP 有一个专门为它设计的函数json_encode(),根据我的经验,它坚如磐石。然而,处理#2 并不那么简单。PHP 具有(或好或坏)转义 HTML、URL 或 SQL 中的文字数据的功能,但它从来没有真正具有在 JavaScript 字符串中完成相同工作的特定功能。我们要编写自己的函数吗?幸运的是没有。这就是 JSON 和 JavaScript 之间的相似性可以帮助我们的地方。碰巧我们也可以json_encode()用来转义 JavaScript 字符串中的原始输入,因为 JSON 语法是 JavaScript 字符串语法的一个子集。但是... JSON 必须是一个对象或一个数组,不是吗?确实如此。幸运的是,PHP 来救援是因为:PHP 实现了原始 RFC 7159 中指定的 JSON 超集。[...]与参考 JSON 编码器一样,json_encode() 将生成一个简单值的 JSON(即,既不是对象也不是数组)如果给定字符串、整数、浮点数或布尔值作为输入值。虽然大多数解码器会接受这些值作为有效的 JSON,但有些可能不会,因为规范在这一点上是模棱两可的。来源换句话说,json_encode()也会产生 JSON片段。所以你可以这样做:<?php$result = 'val01\test\val04'; //these are the data that are get from DB$example = ['testData' => $result];$json = json_encode($example);$javascript = json_encode($json);?><script>var json = <?php echo $javascript; ?>;var obj = JSON.parse(json);</script>其中呈现:<script>var json = "{\"testData\":\"val01\\\\test\\\\val04\"}"var obj = JSON.parse(json);</script>并在浏览器中按预期工作一次:var json = "{\"testData\":\"val01\\\\test\\\\val04\"}"var obj = JSON.parse(json);console.log(obj.testData);如评论中所述,使用 JSON 作为代理将数据从 PHP 传递到 JavaScript 是完全多余的。请记住:JSON 语法是 JavaScript 语法的主题。这意味着任何有效的 JSON 字符串也恰好是有效的 JavaScript 对象或数组文字。在这个用例中,在 PHP 中编码两次然后在 JavaScript 中解码是没有意义的。
打开App,查看更多内容
随时随地看视频慕课网APP