我正在尝试解析递归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结构实例的示例。
答案 0 :(得分:0)
如Willem von Onsem所建议的,如果您定义如下数据,则这要简单得多:
data Tree = Node { value :: Text, children :: [Tree]}
,只是使用一个空列表来表示(也在json中)空子树。然后,您只需通过导出数据类型的fromJSON
来直接解析json。
另一个想法是使用Data.Tree
,它已经具有fromJSON
的派生实例。对于Data.Tree,JSON必须像这样构造:
["a",["b",[]]]