Rails哈希树到数组

Den*_*nis 1 ruby arrays hash ruby-on-rails

我正在尝试解析一个大型XML文件.我正在使用Saxerator.

我的哈希有一种树:

obj= {
  "id"=>'1', "groups" =>{
  "group" =>[
   {"id"=>"2", "groups"=>{}},
   {"id"=>"3", "groups"=>{}},
   {"id"=>"4", "groups"=>{
     "group"=>[
       {"id"=>"5", "groups"=>{}},
       {"id"=>"6", "groups"=>{}},
     ]}}
]}}
Run Code Online (Sandbox Code Playgroud)

我事先并不知道树的深度.我有一个问题.我不知道如何在数组中转换它.结果应该是这样的:

[{"id"=> "1", "parent_id"=> "0"},
{"id"=> "2", "parent_id"=> "1"},
{"id"=> "3", "parent_id"=> "1"},
{"id"=> "4", "parent_id"=> "1"},
{"id"=> "5", "parent_id"=> "4"},
{"id"=> "6", "parent_id"=> "4"}]
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

amn*_*mnn 5

您正在寻找一个非常简单的递归函数,它可以对树进行线性化,但也可以跟踪父级:

def tree_to_a(tree, p = 0)
  id = tree["id"]
  (tree["groups"]["group"] || [])
    .flat_map { |sub| tree_to_a(sub, id) }
    .unshift("id" => id, "parent_id" => p)
end
Run Code Online (Sandbox Code Playgroud)