用 Haskell Aeson 解析 Json 玫瑰树

Parse Json Rose Tree with 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 结构派生实例的示例。

正如 Willem von Onsem 所建议的,如果您像这样定义数据,这会简单得多:

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

另一个想法是使用 Data.Tree,它已经有一个 fromJSON 的派生实例。对于 Data.Tree,JSON 的结构必须如下所示:

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