Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 将数组解析为具有不同结构的记录_Json_Haskell_Aeson - Fatal编程技术网

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=

给定以下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,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