json - 在 Groovy 中序列化为 JSON 时更改字段名称

标签 json groovy

我正在使用 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"}/

更新
或者没有 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"}/

关于json - 在 Groovy 中序列化为 JSON 时更改字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354477/

相关文章:

mysql - 将查询结果保存到变量 Alexa Skills Json 中

javascript - 将 Post 数据从 python 发送到 django

maven - 无法在 build.gradle 的发布 block 中定义任何内容

java - Groovy/Java 映射排序

Groovy 计数目录中与正则表达式匹配的文件数量

java - 如何设置 http 正文 - 将 json 添加到字符串时我没有得到所需的响应

javascript - JQuery AJAX header 和 Google 趋势

java - 不使用 Gson、Jackson 等对 JSONArray 进行排序

groovy - 查找列表中的任何值是否存在于另一个列表中

groovy - 导入其他常规脚本-出现错误