循环遍历嵌套的JSON对象

7

我有一个糟糕设计的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

我这里有什么遗漏吗?我如何实现我想要的结果?提前感谢你的帮助 :)

1
FYI:你没有一个“JSON对象”。 “JSON对象”并不存在。这是一个普遍的误称。JSON是一种文本格式。你拥有的是对象的数组,不是JSON,只是对象。 - Mike Cluck
6个回答

6
您可以使用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方法,效果非常好 :) - user1830833

4
不要循环遍历子对象,只需显示其属性。

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>


谢谢您的回复。我测试了代码,它可以正常工作。现在我需要找出我一开始哪里出错了。 - user1830833

2
你只需要一个 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);
})


谢谢您的回复。我测试了这段代码,它可以运行。现在我需要找出我一开始做错了什么地方。 - user1830833
为什么要使用jQuery(OP从未提到),而使用原生JS也可以实现解决方案呢? - Robin Métral

2

不要遍历对象。你只需要一个循环就可以实现这个。

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


感谢您的回复。我测试了代码,它可以运行。现在我需要找出我一开始哪里做错了。 - user1830833

2
如果所有对象中的属性名称(namevalue)都相同,则可以这样操作。
$.each(land, function(key,value) {
  console.log(value.name + ' : ' + value.value);
}); 

非常好用,先生。谢谢 :) - user1830833

0
var converter = function(object){
    return {city: object[0].value,
           state: object[1].value,
           zip: object[2].value,
           country: object[3].value
    }
}

converter(land)

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


虽然这是一个很好的转换方式,但我有数百条数据库记录需要遍历,因此我必须先将它们全部转换,然后再进行循环。 - user1830833

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接