如何从JSON对象中的键获取值?
问题描述:
我想打印一个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
答
不能检索值通过执行jsonObj.[keys[i]]
与JavaScript对象键相关联。你应该改变这条线,说jsonObj[keys[i]]
。点符号只适用于对象中存在的键。由于[keys[i]]
实际上不是该对象的属性,因此不能使用点符号,而必须使用方括号表示法。
答
你的 “不工作” 行应该是:
document.write(jsonObj[keys[i]]);
^--- no "."
答
当您尝试拨打document.write()
时,您正在将方括号表示法(jsonObj[keys[i]]
)和点表示法(jsonObj.key1)组合起来;他们相当于对方,所以你应该只使用其中之一。在这种情况下,由于关键是动态的,你应该只用方括号:
答
只需使用for..in
循环的对象:
for (var key in jsonObj) {
document.write(key);
document.write(jsonObj[key]);
}