【问题标题】:Looping through nested json object遍历嵌套的 json 对象
【发布时间】:2016-08-26 16:10:36
【问题描述】:

我有一个设计糟糕的 JSON 对象,不幸的是我目前无法更改它包含许多对象。这是我正在使用的示例:

var land = [
    {"name":"city","value":"Los Angeles"},
    {"name":"state","value":"California"},
    {"name":"zip","value":"45434"},
    {"name":"country","value":"USA"}
];

这是我循环 i 的方式:

$(document).ready(function(){
    $.each(land, function(key,value) {
      $.each(value, function(key,value) {
          console.log(key + ' : ' + value);
      })
    }); 
})

结果如下:

name : city
value : Los Angeles
name : state
value : California
name : zip
value : 45434
name : country
value : USA

我的目标是得到这样的结果:

city : Los Angeles
state : California
zip : 45434
country: USA

我在这里缺少什么?如何达到我的预期结果?提前谢谢你:)

【问题讨论】:

  • 仅供参考:您没有“JSON 对象”。没有“JSON 对象”之类的东西。这是一个普遍的误称。 JSON 是一种文本格式。你所拥有的是一组对象。不是 JSON,只是对象。

标签: javascript jquery json


【解决方案1】:

您可以使用 ecmascript 5 的 forEach 方法来做到这一点:

land.forEach(function(entry){ 
      console.log(entry.name + " : " + entry.value) 
} );

或使用 jquery 来支持旧版网络浏览器:

$.each(land,function(index,entry) {
     console.log(entry.name + " : " + entry.value)
});

【讨论】:

  • 我测试了第二种,jquery 方法就像一个魅力:)
【解决方案2】:

不要循环遍历子对象,只显示它的属性。

var land = [{
  "name": "city",
  "value": "Los Angeles"
}, {
  "name": "state",
  "value": "California"
}, {
  "name": "zip",
  "value": "45434"
}, {
  "name": "country",
  "value": "USA"
}];

$.each(land, function(index, object) {
    console.log(object.name, ": ", object.value);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

【讨论】:

  • 感谢您的回复。我测试了代码,它可以工作。现在我必须首先弄清楚我哪里出错了。
【解决方案3】:

您只需要一个forEach() 循环即可获得此结果。

var land = [{
  "name": "city",
  "value": "Los Angeles"
}, {
  "name": "state",
  "value": "California"
}, {
  "name": "zip",
  "value": "45434"
}, {
  "name": "country",
  "value": "USA"
}];

land.forEach(function(e) {
  console.log(e.name + ' : ' + e.value);
})

【讨论】:

  • 感谢您的回复。我测试了代码,它可以工作。现在我必须首先弄清楚我哪里出错了。
  • 为什么 jQuery(OP 从来没有提到过)哪里可以用 vanilla JS 实现解决方案?
【解决方案4】:

不要遍历对象。你只需要一个循环来实现这一点。

 $(document).ready(function(){
                $.each(land, function(key,value) {
                      console.log(value.name + ' : ' + value.value);
                }); 
            })

【讨论】:

  • 感谢您的回复。我测试了代码,它可以工作。现在我必须首先弄清楚我哪里出错了。
【解决方案5】:

如果所有对象中的属性名称都相同(namevalue),那么就这样做。

$.each(land, function(key,value) {
  console.log(value.name + ' : ' + value.value);
}); 

【讨论】:

  • 像魅力先生一样工作。谢谢你:)
【解决方案6】:
var converter = function(object){
    return {city: object[0].value,
           state: object[1].value,
           zip: object[2].value,
           country: object[3].value
    }
}

converter(land)

对象 { 城市:“洛杉矶”,州:“加利福尼亚”,邮编:“45434”,国家:“美国”}

【讨论】:

  • 虽然它是一种转换它的好方法,但我有数百条数据库记录需要循环,所以我必须将它们全部转换,然后循环。
猜你喜欢
  • 2018-05-13
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2014-01-29
相关资源
最近更新 更多