2014-01-25 55 views

回答

4

我想你不會是能夠改變使用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
或者不JsonBuilderJsonOutput

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"}/ 
+0

我知道JsonBuilder的解決方案,但肯定更喜歡JsonOutput(當然如果可能的話) –

+0

查看我的更新。 @JakubK – dmahapatro

+0

我希望找到一些註釋;)但它的作品 - 謝謝! –

相關問題