2
我正在使用JsonOutput將POGO序列化爲JSON。是否有任何選項可以爲特定字段設置替代名稱?在Groovy中序列化爲JSON時更改字段名稱
class MyObject {
def myField = "test" // in JSON I want to have myJsonField instead of myField
}
我正在使用JsonOutput將POGO序列化爲JSON。是否有任何選項可以爲特定字段設置替代名稱?在Groovy中序列化爲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"}/
UPDATE
或者不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"}/
我知道JsonBuilder的解決方案,但肯定更喜歡JsonOutput(當然如果可能的話) –
查看我的更新。 @JakubK – dmahapatro
我希望找到一些註釋;)但它的作品 - 謝謝! –