由于我正在进行的AJAX调用,我无法访问作为JSON从服务器端脚本接收的对象中的某些属性。根据对象本身的数据,我的JSON数据可以有两种形式。JavaScript对象迭代
表1:
"MY_OBJ" : { "FILE" : "myfile.txt",
"PARAMS" : { "PARAM" : { "KEY" : "mykey",
"VALUE" : "myvalue"
} }
}
表2:
"MY_OBJ" : { "FILE" : "myfile.txt",
"PARAMS" : { "PARAM" : [ { "KEY" : "mykeyone",
"VALUE" : "myvalueone"
},
{ "KEY" : "mykeytwo",
"VALUE" : "myvaluetwo"
}
] }
}
这是我当前如何试图解析的数据在浏览器中显示:
function(v) {
var myFormattedData = v.FILE;
if (v.PARAMS !== undefined && v.PARAMS.PARAM !== undefined && v.PARAMS.PARAM.KEY !== undefined && v.PARAMS.PARAM.VALUE !== undefined) {
myFormattedData += '<br />' + v.PARAMS.PARAM.KEY + ' : ' + v.PARAMS.PARAM.VALUE;
} }
这种方法当我的数据在表单1中工作正常。在这种情况下,我将在浏览器中得到输出,如...
myfile.txt
mykey : myvalue
......这正是我想要的。
然而,当数据在表格2我得到的是这样的浏览器中显示的文件名...
myfile.txt
...但我想获得的东西等等。 ..
myfile.txt
mykeyone : myvalueone
mykeytwo : myvaluetwo
我需要能够处理获取这两种形式的数据。更糟糕的是,我可能还应该计划在未来的某个时间点接收超过一个或两个键值对的可能性。我一直在为此奋斗很长一段时间。任何帮助深表感谢!
谢谢!
我收到了很好的答案!我以各种形式尝试了其中的几种。我决定采取什么措施,以及现在对我最好的工作,以及让我为未来的其他键值对做准备,是检查Object.prototype.toString.call(v.PARAMS.PARAM) ===基于@Felix Kling评论的“[object Array]”。当它返回true时,我运行你的(Anthony Accioly)循环。当它返回false时,我只运行myFormattedData + ='
'+ v.PARAMS.PARAM.KEY +':'+ v.PARAMS.PARAM.VALUE;'。谢谢! – bgw 2011-04-27 18:39:35