假设我想使用Aeson来解析以下JSON对象:
{
"data": [
[
"data",
"more data"
],
[
"data",
"more data"
]
],
"error": {
"code": ""
}
}
我可以为JSON对象创建记录,然后像文档描述的那样创建实例来解析各个部分。但是,我真的只对Vector Text
里面的data
感兴趣。有没有比创建记录更直接的方法?如何创建直接让我这样的Parser
并不明显。
似乎有一个Aeson教程正好记录了这个问题:Parsing without creating extra types
在你的情况下,data
有阵列数组,所以我不确定你是否想要一个Vector (Vector Text)
或将它们全部压平成一个数组,但是要从文档中进行调整:
justData :: Value -> Parser (Vector (Vector Text))
justData = withObject "structure with data" $ \o -> o .: "data"
justDataFlat :: Value -> Parser (Vector Text)
justDataFlat value = fmap join (justData value)
另请注意,如果您的结构更深,请执行以下操作:
{
"data": {
"deep": [
"data",
"more data"
]
}
}
你可以多次使用.:
:
deeperData :: Value -> Parser (Vector Text)
deeperData = withObject "structure with deeper data" $ \o ->
step1 <- o .: "data"
step1 .: "deep"