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为什么老是报错
一、代码不用修改:二、user_info.json 文件的内容需要修改。修改有多种方式,需要根据你的实际需求来确定,以下提供两种参考:1、单一 json 数组["yuri", "yuki", "yuri"]2、键值对数组{"name": ["yuri", "yuki", "yuri"]}三、实际运行验证
为什么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
);