2013-04-10 52 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]); 
}