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}
应该会成功。