【问题标题】:How should i access JSON with JavaScript in a for loop? [duplicate]我应该如何在 for 循环中使用 JavaScript 访问 JSON? [复制]
【发布时间】:2013-03-05 02:59:33
【问题描述】:

我在读取 JSON 对象内的数据时有点迷失,这是我拥有的 JSON:

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

我希望能够像这样打印:

1000,1020 年 1 月

15500285 年 2 月

谢谢!

【问题讨论】:

  • data[0].mes.January 或 data[0].mes.January.Inversion,在这两种情况下都显示“未定义”
  • 对我来说很好用。
  • 看看 javascript for in 循环。谷歌'javascript for in'

标签: javascript html json for-loop


【解决方案1】:
// 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"))

【讨论】:

    【解决方案2】:
    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/

    【讨论】:

      【解决方案3】:

      在它的核心,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-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多