访问JSON对象的值

时间:2013-05-19 22:17:02

标签: php javascript json

总而言之,我在从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);                  
    }
}

我为每个值得到“未定义”。 怎么解决这个问题。感谢。

2 个答案:

答案 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>