使用 aeson derivedJSON 可以很容易地省略 Nothing 值,例如:
data Person =
Person {
ssn :: Maybe Text,
phone :: [Text]
}
$(deriveJSON defaultOptions{omitNothingFields=True} ''Person)
我还想省略空列表以保持 JSON 紧凑。是否有一般使用deriveJSON省略空列表而不手动滚动实例的通用方法?
我相信你目前不能这样做。
我猜它遵循对象的结构应该与类型大致对齐的理念;从这个角度来看,拥有{... phone: [] ...}
甚{... phone: null ...}
至是不存在的字段比将它们排除在对象之外“更具类型化”。
如果您希望保持 JSON“紧凑”的原因不是为了优雅,而是出于带宽原因,gzip
或者JSONH之类的东西可以透明地实现几乎相同的节省,而无需更改对象的结构。