2

我想打印 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
4

4 回答 4

3

只需用于for..in循环对象:

for (var key in jsonObj) {
  document.write(key);  
  document.write(jsonObj[key]);  
}
于 2013-04-10T14:37:35.683 回答
2

您无法通过执行来检索与 JavaScript 对象键关联的值jsonObj.[keys[i]]。您应该将该行更改为jsonObj[keys[i]]. 点表示法仅适用于对象中存在的键。由于[keys[i]]实际上不是该对象的属性,因此您不能使用点表示法,而必须使用方括号表示法。

于 2013-04-10T14:35:33.493 回答
1

您的“不起作用”行应该是:

document.write(jsonObj[keys[i]]);
                      ^--- no "."
于 2013-04-10T14:35:29.637 回答
1

jsonObj[keys[i]]尝试调用时,您正在组合方括号表示法 ( ) 和点表示法 (jsonObj.key1) document.write();它们彼此等效,因此您应该只使用其中之一。在这种情况下,由于密钥是动态的,因此您应该只使用方括号表示法:

document.write(jsonObj[keys[i]]);
于 2013-04-10T14:35:55.120 回答