0

for ループを使用して最後の要素まで javacsript を使用してこのような json を解析するにはどうすればよいですか? 2 番目と [object,object] は 3 番目で、どのように json 配列のすべての値をアラートすることができますか?

[
    {
        "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"
    }
]

私が取り組んできたコードは

function orgname()
{
    var json = <?php echo $response ?>;
    alert(json);
    alert(json.length);
    for(var i=0; i<json.length; i++)
    {
        var item = json[i];
        alert(item);   
    }
}
4

2 に答える 2

0

あなたのコードから、これを JavaScript オブジェクトとして直接挿入すると判断しました。json_encode()の世代ですでに使用されていると思います$response

オブジェクト全体を実際にトラバースするには、次のような再帰的なアプローチをお勧めします。

var json = <?php echo $response; ?>;

function traverse( obj, cb ) {
  if( Array.isArray( obj ) ) {
    // array in here
    for( var i=0; i<obj.length; i++ ) {
       traverse( obj[i], cb );
    }
  } else if ( typeof obj == 'Object' {
    // object in here
    for( var i in obj ) {
      if( obj.hasOwnProperty( i ) ) {
        traverse( obj[i], cb );
      }
    }
  } else {
    // literal value in here
    cb( obj );
  }

}

traverse( json, alert );

実際の必要性に応じて、キーを保存したり、他の時点でコールバックを使用したりすることができます。しかし、一般的なアプローチは似ているはずです。

于 2013-04-11T12:25:22.460 に答える
0

あなたの JSON オブジェクトはかなり奇妙です。少し再フォーマットすると、JSON は次のようになります。

[
    {
        "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"
    }
];

外側の配列には 2 つのオブジェクト (場所?) しかありません。そのうち、2 番目のオブジェクトには 2 つの建物が含まれています。すべての建物をトラバースするには、二重にネストされたループまたは再帰が必要になります。

for (var i=0; i<json.length; i++)
{
    var item = json[i];
    for (var j = 0; j < item.location.length; j++)
    {
        var loc = item.location[j];
        // do stuff here with item and/or loc.
    }
}
于 2013-04-11T12:21:56.447 に答える