与Haskell Aeson解析Json玫瑰树

时间:2018-09-07 08:40:04

标签: json haskell aeson

我正在尝试解析递归JSON数据,如下所示:

{
    "node": "a",
    "children": [
        {
            "node": "b",
            "children": [
                {
                    "node": "c",
                    "children": null
                }
            ]
        },
        {
            "node": "d",
            "children": null
        }
    ]
}

现在,我想实现FromJSON的实例,以便可以将其解码为如下所示的数据结构: 以下数据结构

data Tree = Node { value :: Text, children :: [Tree]} | Nothing

我不知道如何执行此操作。我只看到了有关如何使用Aeson派生平面(非递归)JSON结构实例的示例。

1 个答案:

答案 0 :(得分:0)

如Willem von Onsem所建议的,如果您定义如下数据,则这要简单得多:

data Tree = Node { value :: Text, children :: [Tree]},只是使用一个空列表来表示(也在json中)空子树。然后,您只需通过导出数据类型的fromJSON来直接解析json。

另一个想法是使用Data.Tree,它已经具有fromJSON的派生实例。对于Data.Tree,JSON必须像这样构造:

["a",["b",[]]]