phpjson转数组null,php中利⽤函数json_decode将json转化为
数组,。。。
从远程获取到⼀数据,形式为json,但使⽤json_decode转化为数组时却返回为null。不知道是为什么,json的数据确实是存在的
回复内容:
从远程获取到⼀数据,形式为json,但使⽤json_decode转化为数组时却返回为null。不知道是为什么,json的数据确实是存在的
⽤json_last_error查看什么错误引起的
当返回值为null时,可能是因为传⼊的第⼀个参数不能被decode,⽐如说⼀些⾮json_encode的字符串;也有可能是encode的数据深度超出了允许范围。你先检查你获得的数据是否是⼀个标准的json_encode的字符串,有的时候在数据中存在双引号等,都会使数据错误。你最好把你需要处理的字符串发布到这⾥
第⼆个参数加true看看呢
print_r(json_decode($json,true)); //其中true表⽰返回array⽽⾮object.
json_decode($arr,true);才是转为数组,不加第⼆个参数是转为对象。
第⼆种原因:
注意:不能有BOM头输出
在PHP5.4之前 json_decode函数有两个参数json_decode有两个参数,第⼀个是待解析的字符串,第⼆个是是否解析为Array
json_decode要求的字符串⽐较严格:
(1)使⽤UTF-8编码
(2)不能在最后元素有逗号
(3)不能使⽤单引号
(4)不能有\r,\t,如果有请替换
解决办法⼀:
所以问题来了,不⼩⼼在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,如下处理才能正确解析json数据:
⽅法⼆:在转为json之前对中⽂进⾏转码
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter >1000 ) {
die('possible deep recursion attack');
phpjson格式化输出}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 将数组转换为JSON字符串(兼容中⽂)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/ function JSON($array)
{
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
echo JSON($user);
本⽂原创发布php中⽂⽹,转载请注明出处,感谢您的尊重!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论