猫和老鼠出现这个json decode error怎么办?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猫和老鼠出现这个json decode error怎么办?相关的知识,希望对你有一定的参考价值。
猫和老鼠出现这个“json decode error”这个是程序的问题,不是你的原因,可以把这个问题和它在什么情况下发生的,发给官方支持,让他们可以处理。 参考技术A 聊天和鼠标出现这个“JSON代码错误”是一个程序问题,不是你的原因,可以发送这个问题以及在什么情况下发生,发送官方支持让他们可以处理。PHP:JSON 中的正则表达式导致 json_decode 出现问题? [复制]
【中文标题】PHP:JSON 中的正则表达式导致 json_decode 出现问题? [复制]【英文标题】:PHP: regex in JSON causes problem for json_decode? [duplicate] 【发布时间】:2019-06-13 06:43:47 【问题描述】:我的 JSON 中有一些正则表达式,当我在在线 JSON 验证器上测试我的 JSON 时,这似乎不是问题。但是,当我使用该 JSON 字符串并尝试在 PHP 中使用 json_decode()
时,我得到一个 JSON_ERROR_SYNTAX。
任何想法为什么?我该如何解决这个问题?
示例代码:
<?php
$json = <<<EOD
"regex": [
"Hello\s+World"
]
EOD;
json_decode($json);
switch (json_last_error())
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
问题出在\s
。将其更改为 \\s
没有帮助。
【问题讨论】:
哪个在线 JSON 验证器可以验证这个问题中的那个? 看看this package。您可以使用它轻松地将数组转换为 JSON 字符串。 【参考方案1】:当您在 PHP 中编写 "\s"
时,文字字符串为 \s
,因为 \s
不是有效的转义序列。
当您在 PHP 中编写 "\\s"
时,文字字符串是 \s
,因为 \\
是一个有效的转义序列。
另一方面,JSON 会为无效的转义序列抛出错误,这是您的问题。
解决办法: 不要手写JSON。
$json = json_encode(['regex'=> ['Hello\s+World']]);
输出:"regex":["Hello\\s+World"]
[注意:文字字符串,有效 JSON]
糟糕的解决方案比它的价值更麻烦,并且可能会导致问题: "Hello\\\s+World"
欢迎来到地狱。
【讨论】:
当我将 json_decode 为 JSON 数组时,我希望得到一个 PHP 数组作为回报。我得到一个字符串。有什么想法吗? 您的数组可能已被编码多次。显示您的起始 JSON。【参考方案2】:您的字符串"Hello\s+World"
必须像"Hello\\\s+World"
一样转义。第一个转义\
用于转义第二个转义\
转义\s
。
如果你想在输出中有一个数组,那么你必须将assoc = true
设置为json_decode()
函数的第二个参数。
在 documentation 中了解有关 json_decode()
函数的更多信息。
解决方案
查看我的代码中的 DEMO。
<?php
$json = '"regex":["Hello\\\s+World"]';
$obj1 = json_decode($json);
echo $obj1->regex[0]."<br>";
$obj2 = json_decode($json, true); //When assoc == TRUE, returned objects will be converted into associative arrays.
echo $obj2["regex"][0];
?>
如何转义所有 JSON 控制字符:
PHP's json_encode does not escape all JSON control characters【讨论】:
【参考方案3】:由于潜在的复杂正则表达式和双重转义问题,您没有得到您期望的字符串文字。
这应该适用于任何正则表达式:
$regex1 = <<<EOD
Hello\s+World
EOD;
$obj = new stdClass();
$obj->regex = array();
$obj->regex[] = $regex1;
$json = json_encode($obj);
$decoded = json_decode($json);
var_dump($decoded->regex[0]);
输出:
string(13) "Hello\s+World"
【讨论】:
以上是关于猫和老鼠出现这个json decode error怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 php json_decode 中的 JSON_ERROR_UTF8 错误?
解决php中json_decode的异常JSON_ERROR_CTRL_CHAR
json_decode返回null 和synax error原因及处理