我正在尝试解析递归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",[]]]