Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
如何使用Haskell“;json";要解析为类型[映射字符串]的包?_Json_Haskell - Fatal编程技术网

如何使用Haskell“;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

我有一些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"
}]
我正在尝试使用包解析数据(不是):

我可以做到这一点:

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