总而言之,我在从JSON对象访问值时遇到问题。
首先我做json_encode($something)
,其中“某事”是对DB的查询产生的结果。
(正好是3排)。然后在.js中我做了以下:var data = ?php echo $something; ?>;
我在firebug中测试过,数据是(我将显示1行):
[Object {x="something1", y="something2", z="10", w="20"}, ...] so i get Array of objects.
现在我需要访问这些值,但我不知道他们的名字和他们的计数,所以我不能使用像console.log(data[0].x)
这样的工作正常,输出是“something1”;
当我尝试更通用的方式来执行此操作时:
for(var i=0; i<data.length; i++) {
for(var prop in data[i]) {
if(data[i].hasOwnProperty(prop))
console.log(data[i].prop);
}
}
我为每个值得到“未定义”。 怎么解决这个问题。感谢。
答案 0 :(得分:1)
我认为这里的问题是因为这一行
的console.log(数据[I]的丙即可。);
由于点符号,它希望对象具有 prop键而不是value of prop
请尝试使用(使用括号表示法)
console.log(data[i][prop]);
// This make sure that it will first fetch the value
//of propertyName and then search for the key on it
方括号表示法允许访问包含特殊字符的属性以及使用变量选择属性
<强> Check Fiddle 强>
答案 1 :(得分:0)
您可以使用以下内容简化循环:
<html>
<script>
var a = "[ {'x':'something1', 'y':'something2', 'z':'10', 'w':'20'}, {'a':'somethingA', 'b':'somethingB', 'c':'1', 'd':'2'}]";
var data = eval('(' + a + ')');
for(var i in data) {
for(var prop in data[i]) {
console.log(data[i][prop]);
}
}
</script>
</html>