2013-04-08 12 views
7

Ich habe viel gesucht und ich habe nur wenige Methoden gefunden, um die Länge meines JSON-Arrays zu finden. Ich habe versucht:Finden Sie die Anzahl der Objekte in einem JSON-Array

  1. count
  2. json.length

aber diese Rückkehr 1, anstelle der tatsächlichen Länge. Ich möchte es mit PHP zeigen.

Mein json ist:

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

Wie kann ich die Anzahl der Objekte in meinem JSON-Array finden?

+3

JSON ist ein Serialisierungsformat, was ist mit dem Deserialisieren und Überprüfen? –

+0

Hier haben Sie eine andere Lösung ohne json_decode zu verwenden. http: // Stapelüberlauf.com/questions/28772904/convert-json-string-to-array-ohne-json-decode –

+0

Hier haben Sie eine andere Lösung ohne json_decode: http://stackoverflow.com/questions/28772904/convert-json-string-to -array-ohne-json-decode –

Antwort

4

Sie müssen in PHP-Arrays entschlüsseln, bevor Sie mit den Daten arbeiten.

Versuchen:

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

echo count($hugeArray); 

Wenn Sie auf eine geringere Tiefe zählen müssen, müssen Sie das Array durchlaufen.

Zum Beispiel, wenn Sie die Anzahl der Elemente in der nächsten Schicht zählen möchten, können Sie tun:

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

Dies ist jedoch nicht unbedingt sinnvoll, weil es auf abhängt, was Sie versuchen zu zählen, was Ihr Ziel ist. Dieser Block zählt nur die Anzahl der darunter liegenden Elemente, unabhängig davon, was die tatsächlichen Zahlen bedeuten könnten.

+0

und wie kann man nun die Anzahl der Objekte in jedem kleinen Array ausgeben – user2201395

+0

@ user2201395 Dann iteriere man durch die Elemente des Arrays und gebe das count() jedes Elements zurück. – Stegrex

0

Zuerst dekodieren Sie Ihre json und danach count darauf.

$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

Sie müssen decode the json Objekt und dann die Elemente in ihr zählen ..

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

Sie können dies auf eine Zeile kürzen, indem Sie '$ elementCount = count (json_decode ($ json_string, true)) verschachteln;' Wenn Sie $ json_array nicht als PHP-Variable an anderer Stelle benötigen. – AndyD273

0

Objekt (eine ungeordnete Auflistung von Schlüssel: Wert-Paare mit dem ‚:‘ Zeichen der Taste Trennen und der Wert ist, durch Kommas getrennt und in geschweiften Klammern eingeschlossen ist; ...)

Wikipedia: JSON

Also müssen Sie nur die geöffneten geschweiften Klammern zählen.

substr_count($huge , '{'); 

Aber ... Wenn Sie einige Zeichenfolgen mit '{' in Json speichern, können Sie es nicht tun. Auf diese Weise müssen Sie Ihren eigenen einfachen Parser oder regulären Ausdruck schreiben.

Aber ... der einfache Weg zu json_decode. Und verwenden Sie rekursive Funktion, wenn Sie alle Objekte in Json zählen möchten.

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