我有一些像这样的样本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"
}]
import qualified Data.Map.Lazy as M
import Text.JSON
content <- readFile "file.txt"
decode content :: Result [M.Map String String]
这给了我一个错误:
Error "readJSON{Map}: unable to parse array value"
我可以达到这个目的:
fmap
(map (M.fromList . fromJSObject))
(decode content :: Result [JSObject String])
但这似乎是一种非常手动的方式。当然,JSON数据可以直接解析为[Map String String]
类型。指针?
答案 0 :(得分:1)
如果没有MAP_AS_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 (Map a b)
编写实例,因此您当前的解决方法可能是最佳解决方案。