【问题标题】:Javascript get the name of the object after parsing from JSONJavascript从JSON解析后获取对象的名称
【发布时间】:2014-06-19 11:24:05
【问题描述】:

考虑以下 JSON 字符串:

[{"ElementID1":{"latitude":"10.02483","longitude":"70.753464"}},{"ElementID2":{"latitude":"10.029301","longitude":"70.751892"} },{"ElementID3":{"latitude":"10.029568","longitude":"70.751856"}}]

包含在“数据”变量中:

var response = JSON.parse(data);

如何查看此结果? 很明显,我可以首先将其作为数组访问:

for(var element in response)
{

}

但我不知道“ElementID1”会是什么。它可以是任何字符串,所以我不能只做类似

的事情
element.elementID.latitude 

检索对象纬度。而且我也希望能够自己获取该图片ID。

我认为这是一个简单的问题,但我已经尝试在谷歌上搜索一段时间但没有任何进展。

【问题讨论】:

  • 你不应该使用for..in 来遍历一个数组,使用原版的for。我不确定我是否完全理解你在问什么,但答案可能是,嗯,for..in。在任何对象中使用此循环,它将循环其键,就像它循环数组的键一样。换句话说:这是你想要的吗?:for(var i=0, n=response.length; i<n; i++) { for(var key in response[i]) { console.log(key); } }
  • 我必须同意@acdcjunior:for...in JS 中的循环实际上并没有给你元素,只是索引。 Demo

标签: javascript json


【解决方案1】:
var data = [{"ElementID1":{"latitude":"10.02483","longitude":"70.753464"}},
            {"ElementID2":{"latitude":"10.029301","longitude":"70.751892"}},
            {"ElementID3":{"latitude":"10.029568","longitude":"70.751856"}}];

for(var i = 0; i < data.length; i++) {
    var obj = data[i];    
    for (var key in obj) {
       if (obj.hasOwnProperty(key)) {
          console.log(obj[key].latitude);
       }
    }
}

DEMO

基本上,您需要访问每个数据数组元素,在这种情况下它是一个对象,并且由于您不知道每个元素的ElementID* 的名称,您可以循环遍历此的属性对象正在寻找所需的对象,在本例中为latitude

【讨论】:

  • 一些解释以及您的代码,虽然显然没有必要,但通常可以帮助 OP 理解您的答案。
  • 已添加。感谢那! :)
  • 谢谢,这很好用。我实际上已经尝试过了,但一开始是“for..in”。我想知道为什么循环的行为不同。
  • 不客气 :) 实际上,它确实可以通过这种方式与“for..in”一起使用:for(var item in data) { var obj = data[item]; for (var key in obj) { if (obj.hasOwnProperty(key)) { console.log(obj[key].latitude); } } }
【解决方案2】:

您可以执行以下操作:

response.forEach(function(response){
  for (var element in response){
    var picutureId = element;
    var latitude = value[element].latitude;
    var longitude = value[element].longitude; 
   // at this point you can manipulate the pictureId, latitude, and longitude of each object
  }
})

遍历结果数组,遍历每个对象的键/值对并从那里操作数据。

【讨论】:

    【解决方案3】:

    如果连纬度和经度属性名称都不知道

    for (var index in data) { //Iterate through array
        var obj = data[index];
        for (var prop in obj) { //Iterate through ElementId object
            console.log(prop); //Print ElementID
            var latlongObj = obj[prop];
            for (var key in latlongObj) { //Iterate through latlong object
                console.log(key); //Print lattitude/longitude
                console.log(latlongObj[key]); //Print value
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多