Javascript php json_编码创建未缩放的新行运算符
以下是我的php:Javascript php json_编码创建未缩放的新行运算符,javascript,php,arrays,json,Javascript,Php,Arrays,Json,以下是我的php: $response = array( 'errors' => $this->errors, 'orders_fulfilled' => $this->orders_fulfilled, ); echo '<pre>$response: ' . print_r($response, true) . '</pre>'; $json = json_encode($response, JSON_HEX_APOS); e
$response = array(
'errors' => $this->errors,
'orders_fulfilled' => $this->orders_fulfilled,
);
echo '<pre>$response: ' . print_r($response, true) . '</pre>';
$json = json_encode($response, JSON_HEX_APOS);
echo '<pre>$json: ' . print_r($json, true) . '</pre>';
问题:
为什么php的json\u encode()
会在源php数组中的实际换行符中创建未被替换的\n
字符,而这些字符在json字符串中无效
建议避开源换行符,即从\n
转换为\\n
。那么为什么PHP的json\u encode()
不应该在这里这么做呢?目前,它正在直接创建一个json字符串,该字符串阻塞javascript中的json.Parse()
。例如,尝试在控制台中运行以下命令:
JSON.parse(“{”errors:[“Error text\n”],“orders_implemented”:0}”)代码>
VM1628:1未捕获的语法错误:JSON中位于位置的意外标记
22
在JSON.parse()处
时间:1:6
如果我添加斜杠以转义换行符或将其全部删除,则错误消失
是否有json\u encode()
的标志,我应该使用它来处理特殊/控制字符的转义,这是我在PHP手册中没有看到的?json\u encode的输出很好
问题是,当您试图通过使用'
将其包装来将其转换为JavaScript字符串文字时,\n
会被解析为JS字符串中的新行
当您尝试将该字符串解析为JSON时,它有一个真正的新行
要转换为JavaScript字符串,还必须转义其中的任何特殊字符
由于JSON(或多或少)是JavaScript的一个子集,JSON\u encode
将实现以下功能:
var-json=;
var obj=JSON.parse(JSON);
控制台日志(obj);
……但这是一种愚蠢的做法
只需跳过将其视为JSON的部分,将其视为JavaScript即可
var obj=;
控制台日志(obj);
json\u encode的输出正常
问题是,当您试图通过使用'
将其包装来将其转换为JavaScript字符串文字时,\n
会被解析为JS字符串中的新行
当您尝试将该字符串解析为JSON时,它有一个真正的新行
要转换为JavaScript字符串,还必须转义其中的任何特殊字符
由于JSON(或多或少)是JavaScript的一个子集,JSON\u encode
将实现以下功能:
var-json=;
var obj=JSON.parse(JSON);
控制台日志(obj);
……但这是一种愚蠢的做法
只需跳过将其视为JSON的部分,将其视为JavaScript即可
var obj=;
控制台日志(obj);
这不是Shopify的问题,严格来说,这是一个关于php的json_encode
以及与json结合使用的问题。parse
问题您是否解析html中的$json
?因为浏览器会注意到换行符!或者如何测试JSON.parse('{“errors”):[“Sh
line?如果您无法控制错误的输出,只需在$response
中手动添加addslashes
,这不是Shopify问题,严格来说,这是一个关于php的json\u编码
以及与json结合使用的问题。解析
问题您是否解析html中的$json
(print$json
)因为浏览器会注意到断线,或者如何测试<代码> JSON.PARSE(‘{错误’):[ SH < /代码>行?如果不能控制错误的输出,只需在<代码> $Rebug < /代码>中手动添加<代码> AdSLASS/<代码>,我看到了,所以这被看作是在JSON值中间出现的实际断线,从而导致“未终止字符串文字"错误?我已经设法验证了\n
在json字符串中确实是完全有效的\n
在JavaScript字符串中是有效的。\n
在json字符串中是有效的。json字符串表达式中的\n
作为JavaScript字符串将在json字符串中放入新行。新行无效要查看此运行“{”errors:[“Error text\n”],“orders_implemented”:0}“
直接在浏览器的JS控制台中。然后将结果(包括换行符)复制到JSON Lint中。问题的完美演示就在那里!我主要是一个PHP高手,因此我的大脑习惯于只看到双引号中的字符串解释\n
,而单引号中的\n
是字面意思。我没有意识到一个JavaScript字符串将解释<代码> \n>代码>作为一个文字新行(类似于PHP双引号字符串),因此我理解的缺陷。我看到了,所以这被看作是出现在JSON值中间的一个实际的断线,从而导致了一个“未终止的字符串文字”。错误?我已经设法验证了\n
在json字符串中确实是完全有效的\n
在JavaScript字符串中是有效的。\n
在json字符串中是有效的。json字符串表达式中的\n
作为JavaScript字符串将在json字符串中放入新行。新行无效要查看此运行“{”errors:[“Error text\n”],“orders_implemented”:0}“
直接在浏览器的JS控制台中。然后将结果(包括换行符)复制到JSON Lint中。问题的完美演示就在那里!我主要是一个PHP高手,因此我的大脑习惯于只看到双引号中的字符串解释\n
,而单引号中的\n
是字面意思。我没有意识到JavaScript字符串会将\n
解释为一个字面新行(就像PHP双引号字符串),因此我的理解存在缺陷。
$response: Array
(
[errors] => Array
(
[0] => Error text
)
[orders_fulfilled] => 0
)
$json: {"errors":["Error text\n"],"orders_fulfilled":0}
var json = <?php json_encode(json_encode($foo)); ?>;
var obj = JSON.parse(json);
console.log(obj);
var obj = <?php json_encode($foo); ?>;
console.log(obj);