2013-04-08 9 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-json-decodeなしの配列 –

+0

ここにはjson_decodeを使用しないで別の解決策があります:http://stackoverflow.com/questions/28772904/convert-json-string-to -yray-without-json-decode –

答えて

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

+0

@ user2201395次に、配列の要素を反復処理し、各要素のcount()をエコーし​​ます。 – 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

PHPの変数として$ json_arrayを必要としない場合は、 '$ elementCount = count(json_decode($ json_string、true));'をネストすることで、これを1行に短縮することができます。 – AndyD273

0

オブジェクト(キーの順序なしコレクション:「:」と値のペアキーを分離する文字と値は、カンマで区切られたと中括弧で囲まれ、...)

Wikipedia: JSON

だから、あなたがしなければならないのは、開いた中括弧を数えるだけです。

substr_count($huge , '{'); 

...しかし、あなたがそれを行うことはできません 'json'で '{'でいくつかの文字列を格納している場合。そのようにして、独自の単純なパーサや正規表現を書く必要があります。

しかし、... json_decodeへのeasies方法。 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)); 
関連する問題