Json 将数组解析为具有不同结构的记录
给定以下JSON:Json 将数组解析为具有不同结构的记录,json,haskell,aeson,Json,Haskell,Aeson,给定以下JSON: { “数据”:[ [1, 15, 12, 16], [2,49,null,43], [3, 53, 82, 31], [4,86,44,null] ] } 我试图将“data”的内部内容解析为行的Haskell列表,该列表定义为: 数据行=行{ rowElementId::Int, 行值::[可能是Int] } 诀窍在于,对于每一行,rowElementId是对应于该行的子数组中的第一个值。从上述JSON到记录结构的映射为: final=[ 行{rowElementId=
{
“数据”:[
[1, 15, 12, 16],
[2,49,null,43],
[3, 53, 82, 31],
[4,86,44,null]
]
}
我试图将“data”
的内部内容解析为行的Haskell列表,该列表定义为:
数据行=行{
rowElementId::Int,
行值::[可能是Int]
}
诀窍在于,对于每一行,rowElementId
是对应于该行的子数组中的第一个值。从上述JSON到记录结构的映射为:
final=[
行{rowElementId=1,rowValues=[Just 15,Just 12,Just 16]},
行{rowElementId=2,rowValues=[Just 49,Nothing,Just 43]},
行{rowElementId=3,rowValues=[Just 53,Just 82,Just 31]},
行{rowElementId=4,rowValues=[Just 86,Just 44,Nothing]}
]
我成功地为行
编写了ToJSON
实例,它是(为了清晰起见,在这里公开):
实例ToJSON行,其中
toJSON(行eid值)=
toJSONList$Just-eid:values
但是FromJSON
实例对我来说有点神秘。我认为我的思路是正确的,但还不完全正确:
instance FromJSON行,其中
parseJSON(数组arr)=do
eid我最终导入了向量
包,并执行了以下操作:
instance FromJSON行,其中
parseJSON(数组arr)=do
eid::Int
• Couldn't match type ‘vector-0.12.1.2:Data.Vector.Vector Value’
with ‘[aeson-1.5.6.0:Data.Aeson.Types.Internal.Parser EntityId]’
Expected type: [aeson-1.5.6.0:Data.Aeson.Types.Internal.Parser
EntityId]
Actual type: Array
• In the first argument of ‘head’, namely ‘arr’
In a stmt of a 'do' block: eid <- head arr