Haskell中的From和ToJSON-嵌套数据
我有这个:Haskell中的From和ToJSON-嵌套数据,haskell,Haskell,我有这个: data Data1 = Data1 { field1 :: Int, field2 :: Int } data DataMain = DataMain { a :: String , b :: Bool , subData :: Data1 } 和JSON { a: 'some value', b: 'some value2', c: 'some value3', d: 'some value4', } 这里是
data Data1 = Data1 { field1 :: Int, field2 :: Int }
data DataMain = DataMain
{ a :: String
, b :: Bool
, subData :: Data1
}
和JSON
{
a: 'some value',
b: 'some value2',
c: 'some value3',
d: 'some value4',
}
这里是
instance ToJSON DataMain where
toJSON (DataMain a b subData) =
object ["a" .= a
, "b" .= b
, "c" .= (field1 subData)
, "d" .= (field2 subData)
]
我怎样才能做同样的事情,反之亦然
instance FromJSON DataMain where
parseJSON (Object v) =
DataMain <$> v .: "a"
<*> v .: "b"
<*> v .: ?????
parseJSON _ = mzero
来自JSON DataMain的实例,其中
parseJSON(对象v)=
DataMain v.:“a”
v.:“b”
v.:?????
parseJSON=mzero
您可以使用相同的应用程序符号来解析嵌套值,如下所示:
instance FromJSON DataMain where
parseJSON (Object v) =
DataMain <$> v .: "a"
<*> v .: "b"
<*> (Data1 <$> v .: "c" <*> v .: "d")
parseJSON _ = mzero
来自JSON DataMain的实例,其中
parseJSON(对象v)=
DataMain v.:“a”
v.:“b”
(数据1 v.:“c”v.:“d”)
parseJSON=mzero
顺便问一下,如果field1和field2是UTCTime,我如何解析它?我尝试了Data1((读$v.:“field1”)::UTCTime).
但失败了。将它们声明为类似于UTCTime的UTCTime:datadata1=Data1{field1::UTCTime,field2::UTCTime}
应该会成功。