PHP如何检测JSON解码部分是对象还是数组
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
在上面的代码中,我们首先使用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解码后的部分是对象还是数组,并根据需要进行相应的操作。