1

Ivは、Ajax関数から返されるJSON配列を処理する方法に関する多くの検索結果を読みましたが、私の問題に当てはまるものはないようです。

説明:特定の要素のすべての子要素を返すために、構造のようなツリー内のデータベースを効果的に検索しています。1から数百の結果が得られる可能性があります。このうんざりする作業はすべてPHPで行われ、PHPは結果を含むJSON配列を返しますが、結果を反復処理する方法を理解できないようです。これは次のようになります。

{ 
  "Kaz1Kid43343757245": {
    "kaz1KidKid24572649":[],
    "kaz1KidKid24572649Back":[]
  },
  "Kaz1Kid43343757245Back":[]
}

各アイテムは個別のIDとして返送する必要がありますが、試してみると

$.each(obj, function(key, val)
{
    //doing stuff with each item
});

キーには2つの結果(Kaz1Kid43343757245とKaz1Kid43343757245Back)しか表示されませんが、valには何も表示されません。

私は何が間違っているのですか?

乾杯

MVK

4

3 に答える 3

2

配列に再帰する必要があります。あなたのコードは最初のレベルだけを見ていますが、あなたがあなた自身が言うように、それはツリー構造です。したがって、要素が配列の場合は、値を再度取得する必要があります。また、それらが配列の場合は、次のことを行う必要があります…

于 2012-06-14T23:15:04.020 に答える
1

これは再帰関数の例であり、遭遇したオブジェクトにループダウンするか、新しいフラットオブジェクトにキー/値を追加します。

function flatten(obj) {
    var result = {};

    function list(node) {
        $.each(node, function(key, val){
            if (jQuery.isPlainObject(val)) {
                list(val);
            } else {
                result[key] = val;
            }
        });
    }

    list(obj);
    return result;
}

http://jsfiddle.net/userdude/nssvk/

または、最初の呼び出しを実行するための少し凝った方法:

http://jsfiddle.net/userdude/nssvk/1/

これは次のようになります。

{
    "Kaz1Kid43343757245Back" : []
    "kaz1KidKid24572649"     : []
    "kaz1KidKid24572649Back" : []
}

Kaz1Kid43343757245質問は、サンプルオブジェクトのように、「フラット化された」キーで何をしたいのかということです。

于 2012-06-15T00:20:23.750 に答える
1

オブジェクトリテラルを適切なインデントで書き直してみましょう。

{
  "Kaz1Kid43343757245": {
    "kaz1KidKid24572649": [],
    "kaz1KidKid24572649Back": []
  },
  "Kaz1Kid43343757245Back": []
}

ループが2つのプロパティのみを繰り返す理由は明らかだと思います。生成されたJSONを再構築する必要があります。

于 2012-06-14T23:16:16.573 に答える