具有自定义表示的 ToJSON



我有一些类似

data D = D { x :: Maybe X }

我需要将其序列化为 JSON,例如:{"x": {XXX} } ,其中 XXXX 的表示形式,当 x 只是 X 对象时。好的,但是当它是什么都没有时,它必须是{}的,即:{"x": {}} 。如何为此类D实现ToJSON实例? 转换为String是错误的,我得到"{}"而不是{}

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

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

而且,正如您在评论中指出的那样,您可以将这种内在表达打高尔夫球 maybe (Object mempty) toJSON maybeX :: Value .

最新更新