jsondecode(jsondecodeerror什么意思)
本篇文章给大家谈谈jsondecode,以及jsondecodeerror什么意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、PHP json_decode(); 为什么没输出
- 2、为什么python运行json会提示JsonDecodeError?
- 3、为什么json_encode的数组,用json_decode,还原成数组之后只留下一个值了?
- 4、json_decode忽略错误
- 5、json_decode 空白 php
PHP json_decode(); 为什么没输出
我们知道网络api并不是百分百可靠,当遇到网络不稳定,接口出错等各种因素,并不一定返回标准的json数据,例如:
//如果从网络api抓取失败尺嫌山,返回的response为错误信息
$response = 'request timeout';
//json_decode之后返回NULL,你打印之后仍然没有输出,所以你采纳的那个答案仍然也帮不到你
print_r(json_decode($response, true));
//使用var_dump打印虽然可以看到NULL值,可是这并没有任何用处
var_dump(json_decode($response, true));
系统函数json_decode()在解析非json字符串返回NULL,解析乱码的json也返回NULL,你压根都不知道到底是哪里出了问题,因为NULL该返回值是不能通过print_r打印出来的,而官方php手册给了一些捕获异常信息的方法已经封装在下面的函数中了:
?php
/**
* json解析接口,优化json_decode对数组的解析
* @param string $json_code json字符串
* @return mix 错误信息或者数组
*/
function _json_decode($json_code)
{
$json_arr = json_decode($json_code ,true);
switch (json_last_error()){
case JSON_ERROR_NONE:
$error = '';
break;
case JSON_ERROR_DEPTH:
者裂 $error = ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
$error = ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
$error = ' - Unexpected control character found';
break;
陵中 case JSON_ERROR_SYNTAX:
$error = ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
$error = ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
$error = ' - Unknown error';
break;
}
if($error)
{
return $error.':'.$json_code;
}else{
return $json_arr;
}
}
header('Content-type:text/html;charset=utf-8');
$json = 'this is not a json code';
$arr = _json_decode($json);
if(is_array($arr))
{
//解析正确,逻辑代码部分
print_r($arr);
}else{
//请求超时, 一般都会有异常处理机制, 例如重新发起请求
if($result == 'request timeout') {
//发起请求
}else{
//如果没有异常处理机制,抛出异常给上一层处理
throw new Exception($result);
}
}
使用_json_decode的返回值如果是字符串,说明在解析json数据时遇到了错误,只要添加适当处理机制,可以大大提高代码的稳固性。
如果返回值是数组,这时便可以使用print_r打印出来。
为什么python运行json会提示JsonDecodeError?
是编笑数码的问题
按Ctrl+c复制你写碰洞首的代码,新颤胡建一个文档,再粘贴,不要设置编码,再运行,就OK了
或者将编码设成GBK
[img]为什么json_encode的数组,用json_decode,还原成数组之后只留下一个值了?
一个办法,先用json_decode解析成对象,然后遍历对象生敏携成数组
如果不支持json_decode函数的话,只能用分割字符串,或者正则匹配了。
但是匹配起燃明来很麻烦
PS 。。你说的是这个json的php数组表现形式么?如果是的话 就是这样的格式
$json = array
(
array
(
'name' = '家电',
'open' = false,
'nodes' = array
(
array('name'皮拿告='电视'),
array('name'='冰箱'),
array('name'='空调',isParent=true)
)
),
array
(
)
// more here
);
json_decode忽略错误
解决方法如下
on_last_error ― 返回最后发生的错误,如氏缺果有,裤核咐返回 JSON 编码解码时最后发生的错误。
int json_last_error ( void )
常量 含义 可用性
JSON_ERROR_NONE 没有错误发生
JSON_ERROR_DEPTH 到达了最大堆栈深度
JSON_ERROR_STATE_MISMATCH 无效或异常的 JSON
JSON_ERROR_CTRL_CHAR 控制字符错误,可能是编码不对
JSON_ERROR_SYNTAX 语法错误
JSON_ERROR_UTF8 异常的 UTF-8 字符,也许是因为不正确的编码。 PHP 5.3.3
JSON_ERROR_RECURSION One or more recursive references in the value to be encoded PHP 5.5.0
JSON_ERROR_INF_OR_NAN One or more NAN or INF values in the value to be encoded PHP 5.5.0
JSON_ERROR_UNSUPPORTED_TYPE 指定的类型,值无法编码。 PHP 5.5.0
JSON_ERROR_INVALID_PROPERTY_NAME 指定的属性名无法编码。 PHP 7.0.0
JSON_ERROR_UTF16 畸形的 UTF-16 字符,可能因为字符编码不正确。 PHP 7.0.0
?php // 一个有效的胡纯 json 字符串 $json[] = '{"Organization": "PHP Documentation Team"}'; // 一个无效的 json 字符串会导致一个语法错误,在这个例子里我们使用 ' 代替了 " 作为引号 $json[] = "{'Organization': 'PHP Documentation Team'}"; foreach ($json as $string) { echo 'Decoding: ' . $string; json_decode($string); 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; } echo PHP_EOL; }
json_decode 空白 php
注意:This function only works with UTF-8 encoded data.
该函数只支持乎晌裂utf-8的数据
json_decode返回值(原文):
Returns the value encoded in json in appropriate PHP type. Values true, false and null (case-insensitive) are returned as TRUE, FALSE and NULL respectively. NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.
翻译:
将true转为TRUE,false转为FALSE,null为NULL
如果谨喊json不能被解码或者编码的数据太深(默认是512),返回null
有问题岁闭请先看文档
关于jsondecode和jsondecodeerror什么意思的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。