PHP如何检测JSON解码部分是对象还是数组

23 浏览
0 Comments

PHP如何检测JSON解码部分是对象还是数组

我有一个JSON:

{

"catalogs": [

{

"aa" : "aa",

"bb" : "bb"

},

[

{

"cc" : "cc",

"dd" : "dd"

},

{

"ee" : "ee",

"ff" : "ff"

}

]

]

}

和PHP代码:

$catalogs = file_get_contents('test.json');

$catalogs = json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $catalogs), true );

$catalogs = $catalogs['catalogs'];

foreach($catalogs as $catalog){

echo gettype($catalog) . '
';

}

输出结果是:

array

array

但我需要的是:

object

array

0
0 Comments

在上面的代码中,我们首先使用file_get_contents()函数从test.json文件中获取JSON数据。然后,使用json_decode()函数将JSON数据解码为PHP对象。接下来,我们将解码后的对象赋值给$catalogs变量,并使用$catalogs->catalogs语法访问其中的catalogs属性。

然后,我们使用foreach循环遍历$catalogs数组中的每个元素,并使用gettype()函数获取每个元素的类型并输出。

运行上述代码后,我们得到如下输出:

object

array

问题的出现原因是我们无法确定JSON解码后的$catalogs变量是一个对象还是一个数组。为了解决这个问题,我们可以使用is_object()函数和is_array()函数来检测变量的类型。

解决方法如下:

<?php 
$catalogs = file_get_contents('test.json');
$catalogs = json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $catalogs) );
$catalogs = $catalogs->catalogs;
foreach($catalogs as $catalog){
    if(is_object($catalog)){
        echo 'Object<br/>';
    } elseif(is_array($catalog)){
        echo 'Array<br/>';
    }
}

使用is_object()函数和is_array()函数,我们可以判断$catalog变量的类型是对象还是数组,并分别输出相应的结果。

通过上述解决方法,我们可以准确判断JSON解码后的部分是对象还是数组,并根据需要进行相应的操作。

0