我试图处理在JSON中传递给网页的对象,甚至无法访问其中的字段。 对象的格式为
@Optional
这是我的功能:
{
"tag":{
"edges":{
"start1":"end1",
"start2":"end2"
},
"nodes":[
"node1",
"node2"
]
}
}
然而,当我将对象传递给函数时,我无法到达字段function processSimilarMap(obj){
for(var o in obj){
if(obj.hasOwnProperty(o)){
var k=obj[o];
var nodes=k.nodes;//cannot find the field here
console.log(nodes);
var edges=k.edges;//cannot find the field here
console.log(edges);
for(var i=0;i<nodes.length;i++){
//do something
}
for(var e in edges){
if(edges.hasOwnProperty(e)){
//do something
}
}
}
}
}
和k.nodes
。日志显示他们只是k.edges
。我尝试使用undefined
,但它也没有帮助。我在这做错了什么?
很抱歉提出这样一个低级别的问题,但是由于对象和地图的格式相同(如果我错了,请纠正我)。是否有更简单,更优雅的方式,就像&#34; object.attribute&#34;处理对象而不是循环所有可能的属性(字段)并找到那些&#34;自己的属性&#34;?
提前致谢!
答案 0 :(得分:1)
似乎正在工作,也许你没有将Json字符串解析为对象?
var myJson = '{"tag":{"edges":{"start1":"end1","start2":"end2"},"nodes":["node1","node2"]}}';
processSimilarMap(JSON.parse(myJson));
答案 1 :(得分:1)
这似乎对我有用:http://jsfiddle.net/d01Lxcgm/
var obj = {
"tag": {
"edges": {
"start1": "end1",
"start2": "end2"
},
"nodes": ["node1", "node2"]
}
};
如果它只是一个JSON字符串,你确定要解析它吗?(我为问这么愚蠢的问题而道歉但只是先检查最简单的选项)你确定你调用了函数并传递了正确的对象吗?至于更优雅的方式。如果此对象是动态循环属性,则最好的方法是确保始终处理所有内容。如果您知道对象的结构将始终相同,那么您可以使用点表示法访问它。
var tag = obj.tag;
var nodes = tag.nodes;
var edges = tag.edges;
for (var i = 0; i < nodes.length; i++) {
// do something with nodes
}
for (var e in edges) {
if (edges.hasOwnProperty(e)) {
// do something with edges
}
}
当然,你可以像你在问题中所说的那样进行数组访问:
obj['tag'];