0

getJSON を使用して JSON 応答を解析しようとしていますが、オブジェクトの解析がうまくいきません。

これは、JSON の最初の日付に適切な値を返す、私が使用している jquery です。すべての日付を返す必要があります。次のコードがそうしない特定の理由はありますか?

$.getJSON('result.json', 

                   function(data) {

            var dest = [];

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

                dates = data[i].dates[i];      
                visitors = data[i].dates[i].items[i];

                dest.push([dates.date,visitors.value]); 

            }
            alert(dest);

        });

JSONは次のとおりです。

[
  {
"type": "visitors-unique",
"dates": [
  {
    "date": "2013-02-10",
    "items": [
      { "value":"117" }
    ]
  },
  {
    "date": "2013-02-09",
    "items": [
      { "value":"427" }
    ]
  },
  {
    "date": "2013-02-08",
    "items": [
      { "value":"403" }
    ]
  },
  {
    "date": "2013-02-07",
    "items": [
      { "value":"227" }
    ]
  },
  {
    "date": "2013-02-06",
    "items": [
      { "value":"289" }
    ]
  },
  {
    "date": "2013-02-05",
    "items": [
      { "value":"246" }
    ]
  },
  {
    "date": "2013-02-04",
    "items": [
      { "value":"236" }
    ]
  }
]
  }
]
4

2 に答える 2

1

問題は、ネストされた配列がある場合、ループが 1 つしかないことです。コードは、最初のキューで最初の日付を取得しようとし、次に 2 番目のキューで 2 番目の日付を取得しようとします。すべてのキューのすべての日付を取得するには、ネストされたループが必要です。

$.getJSON('result.json', 
  function(data) {
    var dest = [];
    for (var i = 0; i < data.length; ++i) {
      for (var j = 0; j < data[i].dates.length; j++) {
        dates = data[i].dates[j];      
        visitors = data[i].dates[j].items[0];
        dest.push([dates.date,visitors.value]); 
      }
    }
    alert(dest);
  }
);
于 2013-02-10T22:00:04.260 に答える
0

この行が問題です

visitors = data[i].dates[i].items[i];

値は1つしかitemsないため、読み込もうとしている2回目の反復.items[1]では、失敗します。

行をに変更します

visitors = data[i].dates[i].items[0];
于 2013-02-10T21:52:43.853 に答える