如何使用aeson deriveJSON省略空列表?

use*_*458 7 haskell aeson

使用aeson deriveJSON很容易省略Nothing值,例如:

data Person = 
  Person {
    ssn :: Maybe Text,
    phone :: [Text]
  }

$(deriveJSON defaultOptions{omitNothingFields=True} ''Person)
Run Code Online (Sandbox Code Playgroud)

我还想省略空列表以保持JSON紧凑.是否有一般使用deriveJSON省略空列表,没有手动滚动实例?

nh2*_*nh2 2

我相信你目前无法做到这一点。

我想它遵循这样的理念:对象的结构应该与类型大致一致;从这个角度来看,拥有{... phone: [] ...}甚至{... phone: null ...}不存在的字段比将它们排除在对象之外“更加类型化”。

如果您想要保持 JSON“紧凑”的原因不是为了优雅,而是出于带宽原因,或者像JSONHgzip这样的东西可能会透明地实现几乎相同的节省,而无需更改对象的结构。