Я пытаюсь разобрать встроенный JSON вида
{
"foo":"bar",
"baz":"\{\"somekey\":\"someval\"\}"
}
с Эзоном в Хаскеле.Вот мои типы:
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}
Очевидно, что экземпляр FromJSON
для BaseType
не работает, так как он рассматривает его как Value String
вместо большего количества JSON для его анализа.Я пытался найти способ использовать decodeEither
в моем экземпляре FromJSON BaseType
, но для этого потребовалось немного черной магии для преобразования из String
в ByteString
, и я чувствую, что должен быть более аккуратный способ, возможно,относящиеся к withEmbeddedJSON
.
Как я могу сделать это правильно?