我正在尝试访问嵌套数组的键和值,如下所示:
var obj = $.getJSON("mydata.json", function() {
console.log( "load success" );
});
Object.keys(obj[2].type).forEach(function(key) {
console.log(key, obj[key]);
});
但是我收到了错误。
这里是JSON文件的结构:
{
"nodes": [
{
"nd": "nd1",
"cat": "cat1"
}
],
"links": [
{
"id": 100
}
],
"types": [
{
"type": "one",
"image": "image001"
},
{
"type": "two",
"image": "image002"
},
{
"type": "three",
"image": "image003"
}
]
}
我的目标是获取以下值的列表:
一二三
答案 0 :(得分:1)
那样的东西?
您必须首先访问object.types属性,然后对其进行迭代以检索每种类型。
var object = {
"nodes": [{
"nd": "nd1",
"cat": "cat1"
}],
"links": [{
"id": 100
}],
"types": [{
"type": "one",
"image": "image001"
}, {
"type": "two",
"image": "image002"
}, {
"type": "three",
"image": "image003"
}]
};
function parseJson(object){
object.types.forEach(function(key) {
console.log(key.type);
});
}
parseJson(object);

---在评论中更新回答问题---
您可以将代码包含在函数中,并在加载json时调用它:
$.getJSON("mydata.json", function(data) {
parseJson(data);
});
答案 1 :(得分:1)
Object.keys(obj[2].type)
在这里没有意义。您没有迭代任何对象的属性,而是访问一组对象中的相同属性。这就是map
的作用。
var types = obj.types.map(x => x.type);
答案 2 :(得分:1)
$。getJSON返回一个promise,因为它是异步的,但您可以在回调中设置变量:
var obj;
$.getJSON("mydata.json", function(data) {
obj = data;
Object.keys(obj[2].type).forEach(function(key) {
console.log(key, obj[key]);
});
});
答案 3 :(得分:1)
你应该发布你得到的错误,但我可以告诉你问题是你的输出代码在加载JSON对象之前执行。 试试这个:
$.getJSON("mydata.json", function(obj) {
console.log( "load success" );
Object.keys(obj[2].type).forEach(function(key) {
console.log(key, obj[key]);
});
});
答案 4 :(得分:0)
您可以使用以下代码执行此操作:
var obj = {
"nodes": [
{
"nd": "nd1",
"cat": "cat1"
}
],
"links": [
{
"id": 100
}
],
"types": [
{
"type": "one",
"image": "image001"
},
{
"type": "two",
"image": "image002"
},
{
"type": "three",
"image": "image003"
}
]
};
Object.keys(obj["types"]).forEach(function(key) {
console.log(obj["types"][key].image);
});
答案 5 :(得分:0)
以下是在js中执行此功能的方法:
var types = $.getJSON("mydata.json").done(function(response) {
return Object.keys(data["types"]).map(function(element){
return element.type;
}).join(' ');
});
console.log(types);