0

正当な JSON オブジェクトを解析し、多次元配列を調べて、最初に関数の引数に基づいて年を見つけ、次にその年の月を見つけています。

私のforループはネストされています:

    for (year in yearsData) {
        //If we've found the correct year...
        if (yearsData[year]['@attributes'].name == yearToGet) {

        //...walk through that year's child months
        for (month in yearsData[year]) {

            //This works!
            console.log(yearsData[year][month]);

            //This also works!
            console.log(yearsData[year][month]['@attributes']);

            //This does not work! ..but this is what I need!
            console.log(yearsData[year][month]['@attributes'].name);
        }       
   }

Firebug のコンソール (有効な出力) でオブジェクトを追跡できます。

console.log(yearsData[年][月]['@attributes']);

しかし、タイプを最後に追加した瞬間 (.name):

yearsData[年][月]['@attributes'] は定義されていません。

console.log(yearsData[年][月]); 有効なオブジェクトが返され、有効な @attributes がリストされていることがわかります。

スペルを何度も確認しました。何らかの形で年の属性と競合する場合に備えて、属性の名前を他の名前に変更しました..しかし、何も得られませんでした.

私が見逃している簡単なことは何ですか?

JSON:

{
"year": [
    {
        "@attributes": {
            "name": "2013"
        },
        "month": {
            "@attributes": {
                "name": "January"
            },
            "winner": "None!",
            "theme": "Nobody!"
        }
    }
]

}

4

2 に答える 2

0

もう少し頭を悩ませた後、それは超ダープであることが判明しました。ID を表す文字列 'month' ではなく、変数 month を使用していました。

私は使用する必要があります: console.log(yearsData[year]['month']['@attributes'].name);

それを得るために。うわー。

于 2013-03-05T21:29:36.530 に答える
0

jQuery.grep または jQuery.each を使用して、オブジェクトの反復と分析を効率的に行うことを検討してください。それは大いに役立ちます。

http://api.jquery.com/jQuery.grep/

于 2013-03-05T19:22:03.997 に答える