2013-04-10 127 views
2

我想打印一个JSON对象的所有键值对。 我不知道该对象的关键,所以我试图在循环中获取所有的键和相应的值。 但似乎我失去了一些明显的东西。如何从JSON对象中的键获取值?

我的Perl代码

%some_data = ("key1" => "value1","key2" => "value2","key3" => "value3","key4" => "value4"); 
    my $json = encode_json \%some_data; 
print $json; # it prints {"key2":"value2","key4":"value4","key1":"value1","key3":"value3"} 

我简单的JavaScript代码

var jsonObj=$json; 
var keys= Object.keys(jsonObj); 
for (var i = 0; i < keys.length; i++){ 
    document.write("<br /> "); 
    document.write(keys[i]); 
    // document.write(jsonObj.[keys[i]]); # doesnt work 
} 

document.write(jsonObj.key1); #works 

回答

2

不能检索值通过执行jsonObj.[keys[i]]与JavaScript对象键相关联。你应该改变这条线,说jsonObj[keys[i]]。点符号只适用于对象中存在的键。由于[keys[i]]实际上不是该对象的属性,因此不能使用点符号,而必须使用方括号表示法。

1

你的 “不工作” 行应该是:

document.write(jsonObj[keys[i]]); 
         ^--- no "." 
1

当您尝试拨打document.write()时,您正在将方括号表示法(jsonObj[keys[i]])和点表示法(jsonObj.key1)组合起来;他们相当于对方,所以你应该只使用其中之一。在这种情况下,由于关键是动态的,你应该只用方括号:

​​
3

只需使用for..in循环的对象:

for (var key in jsonObj) { 
    document.write(key); 
    document.write(jsonObj[key]); 
}