查找json数组中的对象数

时间:2013-04-08 06:22:58

标签: php json

我搜索了很多,但我找到了一些方法来查找我的JSON数组的长度。我试过了:

  1. count
  2. json.length
  3. 但这些返回1,而不是实际长度。我想用PHP来展示它。

    我的json是:

    $huge = '[{"location":[{"building":["Default Building"],"name":"Default Location"}],"name":"Default Organization"},{"location":[{"building":["test_loc1_building1","test_loc1_building2"],"name":"test location1"},{"building":["test_loc2_building2"],"name":"test location2"}],"name":"test Organization"}]';
    

    如何在JSON数组中找到对象的数量?

5 个答案:

答案 0 :(得分:20)

您需要decode the json对象,然后计算其中的元素..

 $json_array  = json_decode($json_string, true);
 $elementCount  = count($json_array);

答案 1 :(得分:5)

在对数据进行任何处理之前,您需要先解码到PHP数组中。

尝试:

$hugeArray = json_decode($huge, true); // Where variable $huge holds your JSON string.

echo count($hugeArray);

如果需要计算到较低的深度,则需要遍历数组。

例如,如果要计算下一层中元素的数量,可以执行以下操作:

foreach ($hugeArray as $key => $value) {
    echo $key.' - '.count($value);
}

然而,这并不一定有意义,因为它取决于您想要计算什么,您的目标是什么。无论实际数字的含义如何,此块仅计算下面1层元素的数量。

答案 2 :(得分:0)

首先解码您的json,然后在其上使用count

$huge='[{"location":[{"building":["Default Building"],"name":"Default Location"}],"name":"Default Organization"},{"location":[{"building":["test_loc1_building1","test_loc1_building2"],"name":"test location1"},{"building":["test_loc2_building2"],"name":"test location2"}],"name":"test Organization"}]';
$arr = json_decode($huge,true);
echo count($arr);

答案 3 :(得分:0)

  

对象(一个无序的键集合:带有':'字符的值对,用于分隔键和值,用逗号分隔并用花括号括起来; ...)

Wikipedia: JSON

所以,你所要做的只是计算打开的花括号。

substr_count($huge , '{');

但是......如果你在json中存储一些带有'{'的字符串,你就无法做到。这样你就必须编写自己的简单解析器或正则表达式。

但是... json_decode的简易方法。如果你想在json中计算所有对象,可以使用递归函数。

function count_objects($value)
    {
    if (is_scalar($value) || is_null($value))
        $count = 0;
    elseif (is_array($value))
        {
        $count = 0;
        foreach ($value as $val)
            $count += count_objects($val);
        }
    elseif (is_object($value))
        {
        $count = 1;
        $reflection_object = new \ReflectionObject($value);
        foreach ($reflection_object->getProperties() as $property)
            {
            $count +=count_objects($property->getValue($value));
            }
        }

    return $count;
    }

$huge = '[{"location":[{"building":["Default Building"],"name":"Default Location"}],"name":"Default Organization"},{"location":[{"building":["test_loc1_building1","test_loc1_building2"],"name":"test location1"},{"building":["test_loc2_building2"],"name":"test location2"}],"name":"test Organization"}]';

echo count_objects(json_decode($huge));

答案 4 :(得分:0)

我们可以使用“ .sizeof()”函数。 所以