具有自定义表示的ToJSON

时间:2017-06-20 10:28:14

标签: json haskell

我有类似

的类型
data D = D { x :: Maybe X }

我需要将其序列化为JSON,例如:{"x": {XXX} },其中XXXX的代表x 只是X 宾语。好的,但是当 Nothing 时,它必须是{},即:{"x": {}}。如何为ToJSON实施D个实例?转换为String是错误的,我得"{}"而不是{}

1 个答案:

答案 0 :(得分:2)

如果我没有误会,我想你想要这个:

instance ToJSON D where
    toJSON (D maybeX) =
      object ["x" .= (case maybeX of
                        Nothing -> mempty
                        Just x -> toJSON x)]

而且,正如您在评论中指出的那样,您可以将该内在表达式称为maybe (Object mempty) toJSON maybeX :: Value