0

以前に JSON 応答を収集したことがありますが、この特定の応答では、どのような戦術を使用してもオブジェクトを取得できません!

私のJSON:

{ノード: [{タイトル:"テスト"}, {タイトル:"テスト2"}, {

タイトル:「テスト3」}、{

タイトル:"test4" }]};

私のJS:

 $.post('http://mysite.com/some.php', data,  function (data) {


  for (var i=0, len=data.length; i < len; i++) {


      console.log(data.nodes[i].title);


};

});

データ全体を JSON として取得し、それは正常に動作しますが、内部のオブジェクトの解析を取得できません。どのように定式化すればよいですか? 「EACH」の代わりに「FOR」も使用してみました

4

2 に答える 2

1

これらの番号付きのキーは、ノード コンテナがオブジェクトではなく配列であることを示唆しています

于 2013-04-11T23:21:18.613 に答える
0

@KaeVerensに同意します。これは、構造が不適切なJSONです(またはそうでした)。配列ではない配列に加えて、必要と思われない余分なレベルのオブジェクトがあります。JSON を生成している場合は、代わりに次のようにするとより理にかなっています。

{
    "nodes": [
        { "title": "test", "field2": "test2" },
        { "title": "test3", "field2": "test4" }
    ]
}

OK、JSON データが次のようになったので更新します。しかし、あなたが投稿したものは有効な JSON ではありません! これは、コンソールまたはテスト コードで機能する JavaScript オブジェクトですが、 JSON バリデーターを渡しません。プロパティ名は本来あるべきように引用されておらず;、末尾に a があります。次のようになります。

{
    "nodes": [
        { "title": "test" },
        { "title": "test2" },
        { "title": "test3" },
        { "title": "test4" }
    ]
}

(間隔とインデントは問題ではありません。わかりやすくするためにこのようにフォーマットしました。)

とにかく、それを修正すると、このコードは現在のデータで正常に機能します。

$.each( data.nodes, function( index, node ) {    
    console.log( node.title );
});

存在しないものをチェックする代わりに、実際の配列forの長さをチェックすると、ループは正常に機能します。nodesdata.length

var nodes = data.nodes;
for( var i = 0, len = nodes.length;  i < len;  i++ ) {
    var node = nodes[i];
    console.log( node.title );
}

のようなものではなく、このコード (nodesおよびnode変数) のように、ネストされたオブジェクトへの参照を取得することをお勧めしますdata.nodes[i]。追跡するのがはるかに簡単で、効率も向上します (ただし、この単純なケースでは違いはありません)。

于 2013-04-11T23:29:48.630 に答える