在Groovy中使用JSONBuilder排除空值

Pey*_*nkh 4 null groovy json jsonbuilder

是否可以使用默认的JsonBuilder库在Groovy中创建JSON值以排除对象的所有空值?比如杰克逊在Java中通过注释类来排除空值.

一个例子是:

{
   "userId": "25",
   "givenName": "John",
   "familyName": null,
   "created": 1360080426303
}
Run Code Online (Sandbox Code Playgroud)

哪个应该打印为:

{
   "userId": "25",
   "givenName": "John",
   "created": 1360080426303
}
Run Code Online (Sandbox Code Playgroud)

cha*_*wit 7

不确定它是否适合您,因为我的方法适用于Map具有List属性的方法:

def map = [a:"a",b:"b",c:null,d:["a1","b1","c1",null,[d1:"d1",d2:null]]]

def denull(obj) {
  if(obj instanceof Map) {
    obj.collectEntries {k, v ->
      if(v) [(k): denull(v)] else [:]
    }
  } else if(obj instanceof List) {
    obj.collect { denull(it) }.findAll { it != null }
  } else {
    obj
  }
}

println map
println denull(map)
Run Code Online (Sandbox Code Playgroud)

收益率:

[a:a, b:b, c:null, d:[a1, b1, c1, null, [d1:d1, d2:null]]]
[a:a, b:b, d:[a1, b1, c1, [d1:d1]]]
Run Code Online (Sandbox Code Playgroud)

过滤掉null值后,您可以将其渲染Map为JSON.