Home > Backend Development > PHP Tutorial > php中利用函数json_decode将json转化为数组,返回为null

php中利用函数json_decode将json转化为数组,返回为null

WBOY
Release: 2016-06-06 20:31:36
Original
1470 people have browsed it

从远程获取到一数据,形式为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);才是转为数组,不加第二个参数是转为对象。

你可以检测下是否为标准JSON格式:http://www.bejson.com/

第二种原因:
注意:不能有BOM头输出
在PHP5.4之前 json_decode函数有两个参数json_decode有两个参数,第一个是待解析的字符串,第二个是是否解析为Array

json_decode要求的字符串比较严格:
(1)使用UTF-8编码
(2)不能在最后元素有逗号
(3)不能使用单引号
(4)不能有\r,\t,如果有请替换
解决办法一:
所以问题来了,不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,如下处理才能正确解析json数据:

<code><?php $info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);
</code></code>
Copy after login

方法二:在转为json之前对中文进行转码

<code>function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter >1000 ) {
        die('possible deep recursion attack');
    }
    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);
</code>
Copy after login

具体参考我的日志:http://my.oschina.net/rain21/blog/384549

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template