将所有json解码对象转换为php中的数组

时间:2016-01-23 11:30:50

标签: php json

我有一个JSON解码对象(见图):

print screen from browser

我想将整个对象转换为数组(也是子对象)。当我做这样的事情时

$parent_object = (array)$parent_object;

它只转换父对象,子对象仍然是对象。有没有办法一次将所有对象转换为数组,而不是每次都使用(数组)?

3 个答案:

答案 0 :(得分:1)

here的解决方案有帮助吗?

function object_to_array($obj) {
    if(is_object($obj)) $obj = (array) $obj;
    if(is_array($obj)) {
        $new = array();
        foreach($obj as $key => $val) {
            $new[$key] = object_to_array($val);
        }
    }
    else $new = $obj;
    return $new;       
}

此函数以递归方式创建一个包含除对象

之外的任何内容的新数组

答案 1 :(得分:1)

对于一个复杂的对象,当类型转换为(数组)时,我在数组键中得到了空字符,这些字符来源于对象的简化。

var_dumped时,(str)数组键看起来像这样:

arrayKey(str 9个字符,其中隐藏了空字符)实际的字符串:array(NULL CHAR)Key

处理它的最好方法是通过删除空字符(char 0)来进一步清理键。

这种改编有效:

function objectToArray($obj) {
    if(is_object($obj)) {
        $obj = (array) $obj;
        $aobj = array();
        foreach ($obj as $key=>$value) {
            $aobj[_cleanStr($key)] = $value; //sanitize the str for null chars
        }
        $obj = $aobj;
    }
    if(is_array($obj)) {
        $new = array();
        foreach($obj as $key => $val) {
            $new[_cleanStr($key)] = objectToArray($val);
        }
    }
    else $new = $obj;

    return $new;
}

//Clean string
function _cleanStr($str) {
    $str = str_replace("", "", $str); //remove null chars
    return $str;
}

答案 2 :(得分:1)

最好为json_decode()函数设置第二个参数TRUETRUE时,返回objects将转换为关联arrays)像这样 -

json_decode($json, TRUE);