将哈希转换为json格式的文件[Perl]

时间:2018-12-21 23:09:59

标签: perl

因此,我创建了一个函数,该函数创建了一个哈希%data,其外观如下:

{                                                                                                                                     
   '10517' => {                                                                                                                        
                'parent' => '10516', 
                'start' => 1545321095,
                'end' => 1545321098,
                'name' => 'A'                            
              },                                                                                                                       
   '10515' => {                                                                                                                        
                'parent' => '10513', 
                'start' => 1545321091,
                'end' => 1545321095,                    
                'name' => 'B'                           
              },                                                                                                                       
   '10514' => {                                                                                                                        
                'parent' => '10513',  
                'start' => 1545321091,
                'end' => 1545321095,                
                'name' => 'C'                      
              },                                                                                                                       
   '10516' => {                                                                                                                        
                'parent' => '10513',
                'start' => 1545321091,
                'end' => 1545321095,            
                'name' => 'D',                                                                                 
              },                                                                                                                       
   '10511' => {                                                                                                                        
                'parent' => '#####',
                'start' => 1545321090,
                'end' => 1545321099,            
                'name' => 'E'                                             
              },                                                                                                                       
   '10513' => {                                                                                                                        
                'parent' => '10511',
                'start' => 1545321091
                'end' => 1545321097             
                'name' => 'F'
              },                                                                                                                       
   '10518' => {                                                                                                                        
                'parent' => '10516',
                'start' => 1545321094,
                'end' => 1545321098,                    
                'name' => 'G',                                                                                               
              },                                                                                                                       
   '10519' => {                                                                                                                        
                'parent' => '10517',  
                'start' => 1545321096,
                'end' => 1545321097,            
                'name' => 'H',                                                          
              }                                                                                                                        
} 

我想创建一个将数据转换为以下输出的函数:

    {       
        'children' : [
            {
                'id' : 10511,
                'start' : 1545321090,
                'end' : 1545321099,         
                'name' : 'E'    
                'children' : [
                    {
                        'id' : 10513,
                        'start' : 1545321091,
                        'end' : 1545321097,             
                        'name' : 'F'    
                        'children' : [
                            {
                                'id' : 10516,
                                'start' : 1545321091,
                                'end' : 1545321095,         
                                'name' : 'D'            
                            },
                            {
                                'id' : 10514,
                                'start' : 1545321091,
                                'end' : 1545321095,
                                'name' : 'C'                                    
                            },
                            {
                                'id' : 10515,
                                'start' : 1545321091,
                                'end' : 1545321095,             
                                'name' : 'B'                                
                            },
                            {                                                                                                                        
                                'id' : '10517', 
                                'start' : 1545321095,
                                'end' : 1545321098,
                                'name' : 'A'                            
                             }
                        ]
                    }
                ]
            }
        ],
    }

这不是完全期望的数据(这意味着我懒得将另一个ids添加到嵌套格式中。)

我想将哈希%data转换为包含树型格式,如示例中所示。最终目标是要有一个嵌套的数据,以便每个父级哈希每个孩子的数组,并且每个孩子都有一个自己的孩子数组(如果有的话),依此类推。

我应该如何解决这个问题?我正在寻找最干净,最有效的方法。另外,如果可能的话,无需任何其他模块。

1 个答案:

答案 0 :(得分:0)

只需将子元素放入父对象的子数组中即可:

use strict;
use warnings;
use Data::Dumper;
my $data =
    {
     '10517' => {
                 'parent' => '10516',
                 'start' => 1545321095,
                 'end' => 1545321098,
                 'name' => 'A'
             },
     '10515' => {
                 'parent' => '10513',
                 'start' => 1545321091,
                 'end' => 1545321095,
                 'name' => 'B'
             },
     '10514' => {
                 'parent' => '10513',
                 'start' => 1545321091,
                 'end' => 1545321095,
                 'name' => 'C'
             },
     '10516' => {
                 'parent' => '10513',
                 'start' => 1545321091,
                 'end' => 1545321095,
                 'name' => 'D',
             },
     '10511' => {
                 'parent' => '#####',
                 'start' => 1545321090,
                 'end' => 1545321099,
                 'name' => 'E'
             },
     '10513' => {
                 'parent' => '10511',
                 'start' => 1545321091,
                 'end' => 1545321097,
                 'name' => 'F'
             },
     '10518' => {
                 'parent' => '10516',
                 'start' => 1545321094,
                 'end' => 1545321098,
                 'name' => 'G',
             },
     '10519' => {
                 'parent' => '10517',
                 'start' => 1545321096,
                 'end' => 1545321097,
                 'name' => 'H',
             }
 };
my $root = [];
for my $id (keys %$data) {
    my $entry = $data->{$id};
    $entry->{id} = $id;
    my $parent = $data->{$entry->{parent}};
    unless ($parent){
        push @$root, $entry
    }
    else{
        push @{$parent->{children}},$entry;
    }
}
print Dumper $root;

请参见

perldoc perldsc 

有关嵌套数据结构的介绍。