如何使用Haskell“;json";要解析为类型[映射字符串]的包?
我有一些JSON数据示例,如下所示:如何使用Haskell“;json";要解析为类型[映射字符串]的包?,json,haskell,Json,Haskell,我有一些JSON数据示例,如下所示: [{ "File:FileSize": "104 MB", "File:FileModifyDate": "2015:04:11 10:39:00-07:00", "File:FileAccessDate": "2016:01:17 22:37:23-08:00", "File:FileInodeChangeDate": "2015:04:26 07:50:50-07:00" }] 我正在尝试使用包解析数据(不是): 我可以做到这一点: f
[{
"File:FileSize": "104 MB",
"File:FileModifyDate": "2015:04:11 10:39:00-07:00",
"File:FileAccessDate": "2016:01:17 22:37:23-08:00",
"File:FileInodeChangeDate": "2015:04:26 07:50:50-07:00"
}]
我正在尝试使用包解析数据(不是):
我可以做到这一点:
fmap
(map (M.fromList . fromJSObject))
(decode content :: Result [JSObject String])
但这似乎是一种非常手工的方式。当然,JSON数据可以直接解析为类型
[Map String]
。指针?如果没有MAP\u AS\u DICT
开关,JSON(MAP a b)
实例将是:
instance (Ord a, JSON a, JSON b) => JSON (M.Map a b) where
showJSON = encJSArray M.toList
readJSON = decJSArray "Map" M.fromList
因此,只有JSON数组才能解析为Data.Map,否则它将调用mkError
并终止
由于haskell对实例的限制,您将无法自己为
JSON(映射AB)
编写实例,因此您当前的解决方案可能是最好的解决方案。您是否尝试过Map\u AS\u DICT
开关?(请参阅)-我猜第一个版本不知道如何将对象处理为map@Carsten如果我想使用那个开关,我想我需要重新编译。如果可能的话,我想避免一些事情……嗯,是的,这个,保留你的版本或切换到aeson-atm我看不到另一种方式(但我以前从未使用过这个软件包,只是快速浏览了一下haddock)不要感谢我(我帮不上忙)-也许有人会看到这一点并给你一个真正的答案yet@Carsten嗯,解码内容::也许吧[Map String]
与Aeson一起使用,因此我非常高兴,尽管我不太喜欢它。
fmap
(map (M.fromList . fromJSObject))
(decode content :: Result [JSObject String])
instance (Ord a, JSON a, JSON b) => JSON (M.Map a b) where
showJSON = encJSArray M.toList
readJSON = decJSArray "Map" M.fromList