perl 生成json树

 #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;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值