用Haskell Aeson解析Json Rose Tree

问题描述 投票:0回答:1

我正在尝试解析递归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结构的实例的示例。

json haskell aeson
1个回答
0
投票

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

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

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

["a",["b",[]]]
© www.soinside.com 2019 - 2024. All rights reserved.