2013-04-08 128 views
7

我搜索了很多,我發現了很少的方法來查找我的JSON數組的長度。我曾嘗試:查找json數組中的對象數

  1. count
  2. json.length

但這些返回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數組對象的數量?

+3

JSON是一種序列化格式,那麼對它進行反序列化和檢查呢? – 2013-04-08 06:24:09

+0

在這裏你有另一個解決方案,而不使用json_decode。 HTTP://計算器。com/questions/28772904/convert-json-string-to-array-without-json-decode – 2016-03-10 09:19:11

+0

在這裏你有另一個解決方案,而不使用json_decode:http://stackoverflow.com/questions/28772904/convert-json-string-to -array-without-json-decode – 2016-03-10 09:20:29

回答

4

在對數據進行任何操作之前,您需要解碼爲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層的元素的數量。

+0

現在如何在每個小陣列中打印對象的數量 – user2201395 2013-04-08 06:39:50

+0

@ user2201395然後遍歷數組的元素並回顯每個元素的count()。 – Stegrex 2013-04-08 08:15:33

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); 
17

您需要decode the json對象再算上其中的元素..

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

您可以通過嵌套'$ elementCount = count(json_decode($ json_string,true));將此縮短爲一行;'如果不需要$ json_array作爲其他地方的PHP變量。 – AndyD273 2014-12-08 21:07:06

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));