我正在使用 JsonOutput 将 POGO 序列化为 JSON。是否有任何选项可以为特定字段设置替代名称?
class MyObject {
def myField = "test" // in JSON I want to have myJsonField instead of myField
}
最佳答案
我猜您无法使用 JsonOutput 转换字段名称,但您可以轻松使用 JsonBuilder
创建您自己的字段名称转换,如下所示:
import groovy.json.*
class MyObject {
def myField = "test"
def otherField = "other"
}
def obj = new MyObject()
assert JsonOutput.toJson(obj) == /{"otherField":"other","myField":"test"}/
def builder = new JsonBuilder()
builder {
obj.properties.each { prop ->
if( !(prop.key in ['class', 'declaringClass', 'metaClass'] ) ) {
( prop.key == 'myField' ) ?
myJsonField( "$prop.value" ) :
"$prop.key"( "$prop.value" )
}
}
}
assert builder.toString() == /{"otherField":"other","myJsonField":"test"}/
更新
或者没有 JsonBuilder
但 JsonOutput
:
def transform = { object ->
object.properties.collectEntries{key, value ->
!( key in ['class', 'declaringClass', 'metaClass'] ) ?
key == 'myField' ?
['myJsonField', value] : [key, value] :
[:]
}
}
assert JsonOutput.toJson(transform(obj)) ==
/{"otherField":"other","myJsonField":"test"}/
关于json - 在 Groovy 中序列化为 JSON 时更改字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354477/