2
我有一些稱爲節點的結構,每個結構都有一個關於節點的幾個重要特性。我有一個包含一堆節點的圖形結構。本質上,我想遍歷所有節點並創建某種可以將每個節點轉換爲JSON元素的結構。對於每個節點,我都應該在JSON文件中包含一個具有所有功能(其名稱,代碼,羣體...所有屬性)的元素。需要幫助從Perl生成JSON
我似乎無法弄清楚如何使用JSON:XS ...
my $nodeHash = {}; # the hash I plan to pass to the to_json function
my $metros = {}; #each metro is a Node with a bunch of features
my @array=(); # an array that I populate with nodes
#some code to populate the array (these are blessed objects)
$nodeHash->{$metros} = \@array; # metros has a reference to a list of all nodes
my $json = new JSON; # this syntax is yielding an error for some reason
$json = JSON->allow_blessed([$enable]); #im not sure quite how this works from the documentation
my $json_string = $json->encode_json($nodeHash);
open(JSON, ">output.json") or die "cannot open file for reading: $!";
print JSON "$json_string";
我不熟悉JSON:XS,但讓我發表幾條評論。 (1)你是否嘗試過'my $ json = new JSON :: XS;'而不是'my $ json = new JSON';(2)你的代碼包含語句'$ json = JSON-> allow_blessed([$ enable] );',但是你在哪裏設置'$ enable'(如果你沒有設置,它是'false')? – MarcoS 2011-03-01 08:16:10
如果您需要將對象傳遞給json,則可以使用'to_json($ nodeHash,{allow_blessed => 1})''。但它可能不會做你想做的事情,因爲它將對象轉換爲null。對於任意表示,請查看'convert_blessed'選項,並在'Node'中提供'TO_JSON'方法。 – bvr 2011-03-01 09:04:46
通常使用'[]'來表示一個可選參數。這與匿名數組構造函數無關。文檔說'allow_blessed'帶有一個可選參數,默認爲true。但是由於arrayref被認爲是一個真正的值,所以傳遞一個文字'[$ enable]'實際上可以工作以允許有福的對象。 – cjm 2011-03-01 10:21:00