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