Haskell 使用aeson为json中不可用的字段提供默认值
我正在尝试使用Aeson库加载json。问题是,我要加载到的数据结构包含的字段比json多Haskell 使用aeson为json中不可用的字段提供默认值,haskell,aeson,Haskell,Aeson,我正在尝试使用Aeson库加载json。问题是,我要加载到的数据结构包含的字段比json多 data Resource = Res { name :: String, file :: FilePath, res :: Picture, loaded :: Bool } deriving (Generic, Show) 其
data Resource = Res {
name :: String,
file :: FilePath,
res :: Picture,
loaded :: Bool
} deriving (Generic, Show)
其中,json中只有名称和文件字段可用。图片是一个有光泽的图片,所以不能从json加载
我不知道如何省略res并从FromJSON实例中加载。如果不能从JSON加载该结构,那么不要这样定义它!成功
data ResourceRef = ResRef
{ name :: String
, file :: FilePath
} deriving (Generic, Show)
这可以很容易地从JSON加载。然后你可以有一个额外的
data Resource = Res
{ resName :: String
, resFile :: FilePath
, res :: Picture
} deriving (Generic, Show)
…它从未接触过JSON。实施
loadResource :: ResourceRef -> IO Resource
如果无法从JSON加载该结构,请不要这样定义它!成功
data ResourceRef = ResRef
{ name :: String
, file :: FilePath
} deriving (Generic, Show)
这可以很容易地从JSON加载。然后你可以有一个额外的
data Resource = Res
{ resName :: String
, resFile :: FilePath
, res :: Picture
} deriving (Generic, Show)
…它从未接触过JSON。实施
loadResource :: ResourceRef -> IO Resource
如果不是JSON输入,那么这些信息应该来自哪里?稍后在读取JSON后加载图片,同时也将设置加载的字段。我猜加载的图片默认为false,但问题仍然是如何做到这一点。但是当图片未加载时,
res
的值应该是什么?因为这不是java,所以不能为null
,它必须是一张图片。如果希望它能够是null
您必须将类型更改为可能是Picture
。我想我可以试试,加载时也是这样。使它们都可以定义res,因为Maybe Picture仍然会给出一个错误:没有(FromJSON Picture)的实例,如果不是来自JSON输入,那么该信息应该来自何处?稍后在读取JSON后加载图片,同时也会设置加载字段。我猜加载的图片默认为false,但问题仍然是如何做到这一点。但是当图片未加载时,res
的值应该是什么?因为这不是java,所以不能为null
,它必须是一张图片。如果希望它能够是null
您必须将类型更改为可能是Picture
。我想我可以试试,加载时也是这样。让他们都定义res,因为可能图片仍然会给出错误:没有(来自JSON图片)的实例,就在我写下基本相同的答案之前33秒:)谢谢,我几乎最终做了这样的事情。我可以问一个后续问题吗?因为当前我读取文件内容的方式很混乱,因为常规的readFile没有输出ByteString。我怎样才能解决这个问题呢?就在我写下基本相同答案的33秒之前:)谢谢,我几乎最终做了类似的事情。我能问一个后续问题吗?因为当前我读取文件内容的方式很混乱,因为常规的readFile没有输出ByteString。我怎样才能解决这个问题?