1

JSONオブジェクト内のデータを読み取るのに少し迷っています。これが私が持っているJSONです。

var data = [
          {"mes":{
                  "January":{
                     "Inversion":"1000","Fans":"1020"}
                            }
                 },
           {"mes":{
                 "February":{
                     "Inversion":"15500","Fans":"285"}
                            }
            }
            ]

次のように印刷できるようにしたい:

1000、1020年1月

15500、285年2月

ありがとう!

4

3 に答える 3

0
for (var i = 0; i < data.length; i += 1) {
  obj = data[i].mes;
  for (key in obj) {
    if(obj.hasOwnProperty(key)) {
      var monthName = key;
    }
  }
  var iv = obj[monthName].Inversion;
  var fans = obj[monthName].Fans;
  console.log( monthName + "," + iv + "," + fans);
}

実例: http: //jsfiddle.net/sXtZk/

于 2013-03-05T03:08:40.243 に答える
0
// initialise variable to build output
var out = []

// loop through the array
for(var i=0;i < data.length; i++){

    // get a reference to the inner object
    var item = data[i].mes

    // loop through the inner object (k is the key name)
    for(k in item){
        // push the built up string onto the output array
        out.push(k+", "+item[k].Inversion+", "+item[k].Fans)
    }
}

// display the output, joining with newlines
console.log(out.join("\n"))
于 2013-03-05T03:10:53.583 に答える
0

その中心となるのは、JSONは、基本的なol'JS配列とオブジェクトを組み合わせて、サーバー間で交換したり、簡単に解析したりできるオブジェクトを作成するための正式な方法にすぎません。

では、どのように配列を反復処理しますか?

for (i=0; i<array.length; i++) 
    fn(array[i]);

JSオブジェクト/マップの値を列挙するのはどうですか?

for ( key in obj )
    fn(obj[key]);

次に、それらを組み合わせてみましょう。

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

    for ( var key in data[i]["mes"] ) {
        var mName = key;
        var inversion = data[i]"mes"][key]["Inversion"];
        var fans = data[i]"mes"][key]["Fans"]
        alert( [mName, inversion, fans].join(", "));
    }
}

ただし、JSON構造はかなり貧弱です。すべてのレベルmesで、オブジェクトに対応するキーがあります。これは、過度に二重にネストされています。そのシナリオでmesは、本当の意味はありません。代わりに、次の構造を検討してください。

var data = [
    {
        "mes": "January",
        "Inversion": "1000",
        "Fans": "1020"
    },
    {
        "mes": "February",
        "Inversion": "15500",
        "Fans": "285"
    }
];

これは、より単純で論理的であり、(後でわかるように)操作が簡単です。

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

    for ( var key in data[i] ) {
        objToString.push(data[i][key]);
    }

    alert( objToString.join(", "));
}
于 2013-03-05T03:33:31.883 に答える