该问题通常是因为在使用Aeson库解析JSON数据时,Aeson无法找到适当的类型来存储所读取的字段。要解决此问题,可以使用Aeson提供的“withObject”函数来指定要使用的类型。
示例代码:
import Data.Aeson import Data.Text (Text)
data Person = Person { name :: Text , age :: Int } deriving (Show)
instance FromJSON Person where parseJSON = withObject "Person" $ \o -> do name <- o .: "name" age <- o .: "age" return Person { name = name , age = age }
main :: IO () main = do let jsonString = "{"name": "Alice", "age": 25}" case decode jsonString of Just person -> print person Nothing -> putStrLn "Invalid JSON"
在此示例中,我们为“Person”类型实现“FromJSON”实例,并使用“withObject”将其传递给Aeson。这告诉Aeson要使用“Person”类型来存储JSON数据中的字段。此外,我们还使用“.:”函数从JSON对象中提取字段值。
下一篇:Aeson合并对象编码