【发布时间】:2018-12-19 15:57:42
【问题描述】:
我正在尝试解析表单的嵌入 JSON
{
"foo":"bar",
"baz":"\{\"somekey\":\"someval\"\}"
}
与 Aeson 在 Haskell 中。这是我的类型:
data BaseType = BaseType { foo :: String, baz :: EmbeddedType } deriving(Show)
instance FromJSON BaseType where
parseJSON = withObject "BaseType" $ \o -> do
foo <- o .: "foo"
baz <- o .: "baz"
return $ BaseType { foo=foo, baz=baz }
data EmbeddedType = EmbeddedType { somekey :: String }
instance FromJSON EmbeddedType where
parseJSON = withObject "EmbeddedType" $ \o -> do
somekey <- o .: "somekey"
return $ EmbeddedType {somekey=somekey}
显然,BaseType 的 FromJSON 实例不起作用,因为它将其视为 Value String 而不是更多的 JSON 以供解析。我试图找到一种在我的FromJSON BaseType 实例中使用decodeEither 的方法,但这需要我做一些黑魔法才能从String 转换为ByteString,我觉得必须有一个更整洁的方法,可能与withEmbeddedJSON相关。
我怎样才能使它正常工作?
【问题讨论】:
-
这不是可以用Aeson的标准
DeriveGeneric机制解决的吗? -
@MarkSeemann 我不确定这意味着什么,谷歌并没有吐出任何对“DeriveGeneric Aeson”有用的东西。您介意在某个地方解释或链接我吗?
-
@MarkSeemann 我认为这不能解决我的问题。它仍然给出一个“got String expected EmbeddedType”错误。
-
这不是 aeson 派生的东西解决的问题。