perl 生成json树

来源:互联网 发布:巫师2优化补丁 编辑:程序博客网 时间:2024/06/03 03:31
 #perl -w


use strict;


use Encode; 
#use Encode 'from_to';
use Data::Dumper;
use JSON;
 my @OrgRows = ();
 my %id_data = ();
 my %id_chirdren = ();
my $firstid = "0";


 &readdata();


sub readdata(){
my $line;
while (defined($line = <>)){
my @data  = split(/\s+/,$line);
continue if (scalar(@data) < 3);

my $id = $data[0];
my $pid = $data[2];
my $name = $data[1];

$id_data{$id} = $name;
#print "$data[0] - > $data[2] \n";
if (exists $id_chirdren{$pid} ){
push  @{$id_chirdren{$pid}} , $id;

}else{
my @chirdren;
push  @chirdren,   $id;
$id_chirdren{$pid} = \@chirdren;

}
# print Dumper(%id_chirdren);
#  print Dumper(%id_data);







my %ResultData;
&MakeANode(\%ResultData,$firstid);


sub MakeANode(){
my ($hashref,$id) =@_;
$hashref->{"name"}= $id;
#print "$id_data{$id}\n";
$hashref->{"title"} = $id_data{$id};
$hashref->{"children"} = &MakeChildren($id);





sub MakeChildren(){
my ($id) = @_;
unless (exists $id_chirdren{$id}){
return "";
}
my @ChildrenIDs = @{$id_chirdren{$id}};
my @result = ();
foreach my $aChild (@ChildrenIDs){

my %NodeHash  = ();
&MakeANode(\%NodeHash ,$aChild);
push @result ,\%NodeHash;

return \@result;
}
my $json = to_json \%ResultData;   # 不能用decode_json 否则会乱码
print $json;



原创粉丝点击