我有一个使用PHP var json = <?php echo json_encode(['somearray']); ?>
生成的有效JSON。
在此数组中,我有一个html字符串,如下所示:
$myArray = ['image' => '<img src="/img/files/icon3.png" alt="" title="" />'];
json_encode($myArray);
由于某种原因,当我将上述json发送到JSON.parser时,我不断收到意外的令牌错误"SyntaxError: Unexpected token / in JSON at position XYZ"
示例
var json = '[{"id":8,"type":"dataFiles","name":"Noise Data Files","selected":{"data":{"id":1,"subscription_id":"3","filestorage_id":"1","title":"test 1","graph_type":"line chart","settings":{"band":"broadband","interval":"long","measurement":"1","time_interval":"","frequency":"","param":"","display":""},"created_at":"2018-07-03 21:46:08","updated_at":"2018-07-03 21:46:08","created_by":"5","page":"1","picture":"customers/3/dataviewer/nKvvMkRbKcU53mkflUdqIe8VUaRrM83EqpsiPNuc.png","pivot":{"project_element_id":"4","dataviewer_id":"1"},"type":"<img src=\"/img/dataviewer/icon.png\" alt=\"3\" title=\"Third\" />","name":"00014_C_110609_240118 (1).csv","instrument":"dBAir","serial_number":"67600","recorded_on":"2024-01-18 11:06:09"}},"set":true},{"id":2,"type":"freeText","name":"Free Text","selected":"Some text","set":true}]';
JSON.parse(json);
答案 0 :(得分:0)
*编辑:我不得不重新安装我的php服务器,以便可以验证这一点,但是我怀疑您正在这样做:
<script>
var json = '<?php echo json_encode($myArray); ?>';
JSON.parse(json);
</script>
事实是,当您像这样直接在HTML中回显json_encode
时,根本不需要JSON.parse
,并且您也不想尝试使其成为字符串。删除引号,您的var json
实际上是对象,而不是字符串。像这样:
<script>
var myArray = <?php echo json_encode($myArray); ?>;
</script>
请注意,<? ... ?>
周围没有引号。同样,myArray
不会是字符串,而是一个数组。
答案 1 :(得分:0)
您的问题与JSON序列化无关,甚至与JSON无关。问题是您要将其作为字符串文字粘贴在代码中。
当您在JavaScript字符串文字中(例如,在您的代码中)使用反斜杠\
时,例如,它用作转义字符,\n
会解析为换行符。
console.log('line 1 \n line 2`);
在您的情况下,您不必要地尝试使用\/
来转义正斜杠,因为您一开始并没有转义反斜杠。也就是说,要将JSON直接包含在代码中,就像包含反斜杠的任何字符串一样,您将必须将反斜杠加倍以首先有效地取消反斜杠的转义。
因此,在您的字符串文字中,\/
变成了\\/
。
如果直接从服务器加载JSON,那么这都不是问题。这只是一个问题,因为您已将其粘贴到代码中。
答案 2 :(得分:0)
我必须对通过PHP发送到javascript的JSON执行JSON.stringify()。之后,/和其他令牌的问题消失了。