我想打印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
答案 0 :(得分:3)
只需使用for..in
来循环对象:
for (var key in jsonObj) {
document.write(key);
document.write(jsonObj[key]);
}
答案 1 :(得分:2)
您无法通过执行jsonObj.[keys[i]]
来检索与JavaScript对象键关联的值。您应该将该行更改为jsonObj[keys[i]]
。点表示法仅适用于对象中存在的键。由于[keys[i]]
实际上不是该对象的属性,因此您不能使用点表示法,而必须使用方括号表示法。
答案 2 :(得分:1)
你的“不行”行应该是:
document.write(jsonObj[keys[i]]);
^--- no "."
答案 3 :(得分:1)
在尝试调用jsonObj[keys[i]]
时,您将方括号表示法(document.write()
)和点表示法(jsonObj.key1)组合在一起;它们彼此相同,所以你应该只使用其中一个。在这种情况下,由于键是动态的,因此您应该只使用方括号表示法:
document.write(jsonObj[keys[i]]);