Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 Aeson将数组转换为对象_Haskell - Fatal编程技术网

Haskell Aeson将数组转换为对象

Haskell Aeson将数组转换为对象,haskell,Haskell,最好的方法是什么 Data.Aeson FromJSON实例 将数组转换为对象: import Data.Aeson data MixArray = MixArray {

最好的方法是什么 Data.Aeson FromJSON实例 将数组转换为对象:

import Data.Aeson

data MixArray = MixArray {                                                                                                                                                                                         
  vStr :: String,                                                                                                                                                                                                   
  vNum :: Int,
  vBool :: Bool                                                                                                                                                                                                  
} deriving Show   

main = do
  jsonStr = ["a",1,true]
  mix <- eitherDecode $ jsonStr :: IO (Either String [MixArray])
  show mix

您可以对列表和类型重用
FromJSON
实例,然后在模式匹配后构造您的类型。如果模式匹配失败,解析器将失败

import Data.Text (unpack)

instance FromJSON MixArray where
  parseJSON jsn = do
    [String s, Number n, Bool b] <- parseJSON jsn
    return MixArray { vStr = unpack s, vNum = truncate n, vBool = b }
导入数据.Text(解包)
来自JSON MixArray的实例,其中
parseJSON jsn=do
[字符串s,数字n,布尔b]
import Data.Text (unpack)

instance FromJSON MixArray where
  parseJSON jsn = do
    [String s, Number n, Bool b] <- parseJSON jsn
    return MixArray { vStr = unpack s, vNum = truncate n, vBool = b }