打印JSON对象的键和值

4

我有2个外部的json文件,需要使用键和值来读取这些文件中的数据。我的应用程序不依赖于obj.name等内容。请帮助我打印这些值。

Planets.json

 {
"Planets": [
  { "name": "Mercury",
    "color": "Orange",
    "distance": "57.91 km",
    "radius": "2340 km",
    "year": "0.24085 Earth",
    "day": "88 days",
    "mass": "0.054 Earth"
  },

  { "name": "second",
    "color": "Orange",
    "distance": "57.91 km",
    "radius": "2340 km",
    "year": "0.24085 Earth",
    "day": "88 days",
    "mass": "0.054 Earth"
  }

}

Airports.json

    {
"Airports": [
  {
    "listing": "East 34th Street Heliport",
    "iata": "TSS",
    "type": "Heliport",
    "size": "Tiny"
  }

这是我正在尝试的代码。

              $.ajax({
                url:"planets.json",
                dataType: "json",
                success:function(json){
                    $.each(json, function(key, value){
                        console.log(key + ": " + value);
                    });
                }

            });

我在控制台中得到了以下输出:

行星:[对象 对象]

3个回答

5
使用json.Planets[0]获取嵌套对象,并对其进行迭代。
$.each(json.Planets[0], function(key, value){
    console.log(key + ": " + value);
});

更新 1: 如果对象只包含一个属性,则可以使用 Object.keys() 获取它,并执行与前面示例相同的操作。
$.each(json[Object.keys(json)[0]][0], function(key, value){
    console.log(key + ": " + value);
});


更新 2 : 如果有多个属性,则使用 $.each() 方法两次。

$.each(json,function(k, v){
    $.each(v[0], function(key, value){
        console.log(key + ": " + value);
    });
})

更新 3 : 如果您有包含多个对象的嵌套数组,则使用额外的 Array#forEach 方法来迭代它。

json[Object.keys(json)[0]].forEach(function(v){
    $.each(v, function(key, value){
        console.log(key + ": " + value);
    });
});

更新 3: 如果您的 JSON 包含多个具有嵌套多个数组元素的属性,请执行上述方法的组合。

$.each(json,function(k, v){
    v.forEach(function(v1){  
        $.each(v1, function(key, value){
            console.log(key + ": " + value);
        });
    });
})

如果我将文件名“planets”更改为“airports”,那么我必须修改所有内容。 - Muhammad Riaz
如果您遍历顶层对象(json),则可以获取键:Planets,Airports等。 - Jim Cote
如果有三个行星并逐个打印它们,应该怎么做? - Muhammad Riaz
@SaqibSaqib:很高兴能帮忙 :) - Pranav C Balan
让我们在聊天中继续这个讨论 - Pranav C Balan

1

0

你可以使用一个双倍循环,这样它就不依赖于名称“airports”

$.each(json, function(objectTitle, objects){
    console.log('List of ' + objectTitle + ':');
    $.each(objects, function(objectKey, objectValue){
        console.log(objectKey + ':' +  objectValue);
    });
});

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