2016-11-10 81 views
1

我试图访问我的嵌套数组的键和值是这样的:如何访问嵌套的JSON对象键和值

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

你什么错误? –

+0

'var vals = obj.types.map((x)=> x.image;});' – sed

+0

这个工程对象 – Dimitri

回答

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); 
}); 
+0

没有键2,但是如何从外部文件加载它。我怎么用'getJSON'命令做到这一点? – passion

1

Object.keys(obj[2].type)这里没有意义。您不是迭代任何对象的属性,而是访问一组对象中的相同属性。这是map所做的。

var types = obj.types.map(x => x.type); 
+0

不是'map(x => x.type)'TypeScript语法吗? –

+0

@VitaliiStrimbanu:可能也是这样,但它也是EcmaScript 6。 –

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); 
 
});

1

$ .getJSON返回一个承诺,因为它是异步的,但你可以在回调设置您的变量:

var obj; 
$.getJSON("mydata.json", function(data) { 
    obj = data; 
    Object.keys(obj[2].type).forEach(function(key) { 
     console.log(key, obj[key]); 
    }); 
}); 

link to documentation

1

你应该发布你得到的错误,但我可以告诉你,问题是你的输出代码在JSON对象被加载之前执行。 试试这个:

$.getJSON("mydata.json", function(obj) { 
    console.log("load success"); 
    Object.keys(obj[2].type).forEach(function(key) { 
     console.log(key, obj[key]); 
    }); 
}); 
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);