2012-12-30 189 views
4

我想轉換散列的數組,我創造這樣的:哈希轉換陣列JSON

while(...) 
{ 
    ... 
    push(@ranks, {id => $id, time => $time}); 
} 

要JSON:

use JSON; 
$j = new JSON; 
print $j->encode_json({ranks => @ranks}); 

但它輸出這樣的:

{"ranks":{"time":"3","id":"tiago"}, 
"HASH(0x905bf70)":{"time":"10","id":"bla"}} 

正如你所看到的,它不能寫在哈希上,也沒有數組...

我想輸出看起來像這樣的JSON字符串:

{"ranks":[{"time":"3","id":"tiago"}, 
      {"time":"40","id":"fhddhf"}, 
      {"time":"10","id":"bla"}]} 
+0

什麼是$ J′你用什麼軟件包來支持JSON? – schtever

+0

對不起,更新了這個問題... –

回答

6
print $j->encode_json({ranks => @ranks}); 

應該是:

print $j->encode_json({ranks => \@ranks}); 
+0

謝謝,修好了!你能解釋一下這個區別嗎? –

+0

沒有參考,數組將被內插到它的單個元素中。...... – pavel

+0

......其中第一個被作爲行列關鍵字的值,其餘部分被視爲附加(串化)關鍵字,並且值 – ysth

3

嘗試傳遞數組作爲參考。

to_json({ranks => \@ranks},{ascii => 1,pretty => 1});

6

所有這些都是一樣的:

ranks => @ranks 

'ranks', @ranks 

'ranks', $ranks[0], $ranks[1], $ranks[2] 

ranks => $ranks[0], $ranks[1] => $ranks[2] 

所以,你要創建一個哈希有兩個元素,當你想用一個元素創建一個散列。

您試圖使用一個數組作爲散列值,但散列值只能是標量。然而,由於引用是標量,因此使用對數組的引用作爲散列值是很常見的,這就是encode_json所期望的。

print $j->encode_json({ ranks => @ranks }); 

應該

print $j->encode_json({ ranks => \@ranks });