什么是限制这个JSON解析,我能做些什么来解决它?
该问题很容易理解和演示。什么是限制这个JSON解析,我能做些什么来解决它?
此代码工作正常:
<?php
$title = array("dfg","sdfsdg","asfas","Sdfh","Ssdth","Csdgo");
$title_json = json_encode($title);
?>
<script>
var obj = JSON.parse('<?= $title_json; ?>');
console.log(obj);
</script>
此代码不:
<?php
$title = array("Is President Trump still using his old Android phone?","Trump sets a dizzying WH pace in first days","Trumps White House Charm Offensive a Contrast to Solitary Obama","The inside story of a basketball teen so tall, he doesn't look real","Scientists say they are closer to making Star Wars holograms","Sperm theft lawsuit leaves appeals court weighing how much a life is worth","Call it Smunday: Heinz pushing to make Super Bowl Monday a national holiday");
$title_json = json_encode($title);
?>
<script>
var obj = JSON.parse('<?= $title_json; ?>');
console.log(obj);
</script>
输出错误控制台:Uncaught SyntaxError: missing) after argument list - (index):20
其中第20行是一个与JSON.parse,如果你看看源该行的代码为:
var obj = JSON.parse('["Is President Trump still using his old Android phone?","Trump sets a dizzying WH pace in first days","Trump's White House Charm Offensive a Contrast to Solitary Obama","The inside story of a basketball teen so tall, he doesn't look real","Scientists say they are closer to making 'Star Wars' holograms","Sperm theft lawsuit leaves appeals court weighing how much a life is worth","Call it 'Smunday': Heinz pushing to make Super Bowl Monday a national holiday"]');
您可能注意到两个代码s ample完全一样,数组甚至具有相同的长度,唯一的区别是字符串在第二个中更长。这是否意味着可以由JSON解析的字符串的最大长度?
您的JSON数据包含'
。因此,如果您将该数据注入到'
分隔字符串文字中,则该字符串文字将过早关闭并导致语法错误。简单的例子:
var foo = '{"key": "This key's value"}';
你应该注意到,如果你看看生成的JavaScript源代码。
这里没有必要使用JSON.parse
。注入的JSON可以解释为一个JavaScript对象/数组常量:
var obj = <?= $title_json; ?>;
然后在什么情况下我需要JSON.parse,我只是跟着一篇文章说这就是你将PHP数组传递给JavaScript。 –
如果您的字符串值包含JSON,则需要'JSON.parse'。例如,如果您执行了“XMLHTTPRequest”并获取JSON作为响应,则会发生这种情况。但是,您在这里生成来自PHP的JavaScript源代码。由于JSON可以解析为JavaScript源代码(如果它位于正确的位置),您可以直接将它作为对象/数组注入到源中,而不是将其注入为字符串文本的内容。正如您注意到的那样,这很容易出错,因为某些字符和字符序列在字符串文字中有不同的含义。 –
也许这有点牵强,但考虑一下这个例子:如果你只是有一个数值,你可能会做'var n = ;'而不是'var n = eval('');'。 'eval'是不必要的,因为'42'是JS中的一个有效的数字字面值(这个例子的缺点是如果它不是有效的JS代码,那么'eval'将不起作用,但是\\ _(ツ) _ /¯)。 –
注意,如果你已经显示为出现在浏览器中的线,基于颜色的语法高亮显示的是所以添加到你的代码暗示了这个问题。 – nnnnnn
这几天你可以使用'\''(aka。反引号)来包装字符串。 (即'var obj = JSON.parse(\'['Pre Pre ...“] \');' – haxxxton
@nnnnnn事实上,如果我使用的IDE共享突出显示,我可能永远不需要问这个问题,我会知道这是撇号,当然,我仍然不知道我甚至不需要JSON.parse,并会花一段时间试图找出如何逃避撇号。 –