2013-04-08 26 views
7

Szukałem dużo i znalazłem kilka metod, aby znaleźć długość mojej tablicy JSON. Próbowałem:Znaleźć liczbę obiektów w tablicy json

  1. count
  2. json.length

ale te zwraca 1, zamiast rzeczywistej długości. Chcę to pokazać za pomocą PHP.

Moje JSON jest:

$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"}]'; 

Jak mogę znaleźć liczbę obiektów w moim tablicy JSON?

+3

JSON to format serializacji, co powiesz na jego odserializowanie i sprawdzenie? –

+0

Tutaj masz inne rozwiązanie bez użycia json_decode. http: // stackoverflow.com/questions/28772904/convert-json-string-to-array-without-json-decode –

+0

Tutaj masz inne rozwiązanie bez użycia json_decode: http://stackoverflow.com/questions/28772904/convert-json-string-to -array-without-json-decode –

Odpowiedz

4

Musisz rozkodować tablice PHP przed rozpoczęciem pracy z danymi.

Spróbuj:

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

echo count($hugeArray); 

Jeśli trzeba liczyć na niższą głębokości, trzeba wykonać iterację tablicy.

Na przykład, jeśli chcesz policzyć liczbę elementów w następnej warstwy, można zrobić:

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

Jednak niekoniecznie jest to sensowne, ponieważ zależy od co próbujesz liczyć, jaki jest twój cel:. Ten blok liczy tylko liczbę elementów znajdujących się pod warstwą 1, niezależnie od tego, jakie rzeczywiste liczby mogłyby oznaczać.

+0

, a teraz jak można wydrukować liczbę obiektów w każdej małej tablicy – user2201395

+0

@ user2201395 Następnie należy powtórzyć elementy tablicy i echo count() każdego elementu. – Stegrex

0

Najpierw odkodować swój json, a następnie użyć na nim 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

Trzeba decode the json obiektu, a następnie policzyć elementy w nim ..

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

Możesz to skrócić do jednej linii, zagnieżdżając '$ elementCount = count (json_decode ($ json_string, true)); Jeśli nie potrzebujesz $ json_array jako zmiennej PHP gdziekolwiek indziej. – AndyD273

0

Object (nieuporządkowana kolekcja klucz: par wartości z „:” znak oddzielający klucz i wartość, przecinek rozdzielone i umieszczone w nawiasie klamrowym, ...)

Wikipedia: JSON

Wszystko, co musisz zrobić, to zliczyć otwarte nawiasy klamrowe.

substr_count($huge , '{'); 

Ale ... Jeśli przechowujesz kilka ciągów z "{" w jsonie, nie możesz tego zrobić. W ten sposób musisz napisać swój własny prosty parser lub wyrażenie regularne.

Ale ... najprostsza droga do json_decode. I użyj funkcji rekursywnej, jeśli chcesz uzyskać liczbę obiektów wszystkich w 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)); 
Powiązane problemy