从act_as_tree树构建JSON字符串

时间:2015-05-08 20:47:40

标签: ruby

我是学习Ruby的新手。在程序中,我使用acts_as_tree从分层表构建组织树。现在,我希望从树节点中包含的数据构建一个JSON字符串。在JSON输出中,每个父节点都有一个名为' children'它将包含父节点子节点的记录数组。要构建这样的JSON字符串,可以选择手动遍历整个树。但是,我想知道的是,还有其他方式比这更优雅。

2 个答案:

答案 0 :(得分:1)

我已经在另一个项目中完成了这项工作,但是使用了自己种植的树结构。您需要覆盖对象上的as_json。我认为这样做:

def as_json(opts = {})
  super(opts.merge(include: :children))
end

就足够了,而且可能是 - 我的代码库可能还有其他问题阻止它工作。但是,我能够这样做:

def as_json(opts = {})
  super(opts).merge(children: children.as_json)
end

这实际上创建了一个递归as_json调用,因为as_json将在所有子元素上调用,然后将对其子元素调用as_json方法,依此类推。

答案 1 :(得分:0)

您是否看过JSON库?

尝试:

require 'json'
your_object.root.to_json

甚至只是:

require 'json'
your_object.to_json

您可以从根,对象和子项创建哈希和数组......

{root: your_object, children: your_object.children }.to_json

由于我从未使用acts_as_tree库,因此我不确定这是否会有所帮助。