如何从JSON对象中的键获取值?

时间:2013-04-10 14:31:58

标签: javascript json parsing object

我想打印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 个答案:

答案 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]]);