2013-04-08 5 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 - это формат сериализации, как его де-сериализовать и проверять? –

+0

Здесь у вас есть другое решение без использования json_decode. Http: // StackOverflow.com/questions/28772904/convert-json-string-to-array-without-json-decode –

+0

Здесь у вас есть другое решение без использования json_decode: http://stackoverflow.com/questions/28772904/convert-json-string-to -array-without-json-decode –

ответ

4

Прежде чем выполнять какую-либо работу с данными, вам необходимо декодировать в массивы PHP.

Try:

$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

+0

@ user2201395 Затем вы повторяете элементы массива и эхотете счетчик() каждого элемента. – Stegrex

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

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)); 
Смежные вопросы