如何在 Groovy 中的 JSON 转换器方法中保留字母大小写?

Posted

技术标签:

【中文标题】如何在 Groovy 中的 JSON 转换器方法中保留字母大小写?【英文标题】:How to keep Letter Case in JSON Converter method in Groovy? 【发布时间】:2016-11-27 11:08:17 【问题描述】:

我正在尝试将一个 groovy 对象解析为 JSON。属性名称不遵循正确的驼峰式格式。

class Client 
    String Name
    Date Birthdate

当我使用它时

Client client = new Client(Name: 'Richard Waters', Birthdate: new Date())
println (client as JSON).toString(true)

我知道了

"client": 
      "name": 'Richard Waters',
      "birthdate": "2016-07-22T03:00:00Z",

如何在属性键的开头保留 de 大写?

【问题讨论】:

你使用了一种奇怪的格式......如果你想去滑雪,最好使用像杰克逊这样的东西......驼峰大小写是常态,小写字母开头。特别是对于 groovy 中的变量名 我知道骆驼案是常态。但是我正在研究的 API 定义了这些奇怪的格式! =/ 【参考方案1】:

另一种选择是使用带有注释的gson serializer:https://google.github.io/gson/apidocs/com/google/gson/annotations/SerializedName.html

@Grab('com.google.code.gson:gson:2.7+')
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName

class Client 
    @SerializedName("Name")
    String name

    @SerializedName("Birthdate")
    Date birthdate


def client = new Client(name: 'John', birthdate: new Date())

def strJson = new Gson().toJson(client)
println strJson

【讨论】:

【参考方案2】:

您违反了标准命名约定,因此它会自动将其转换为驼峰式。

因此,如果您想覆盖驼峰式大小写,一种选择是编写覆盖object.getProperties() 又名object.properties 的自定义方法以返回自定义地图,因为在内部创建的地图使用getName() 类的getName() 方法而不是获取真实的属性名称。

因此,您必须执行的唯一工作就是编写一个自定义通用方法,将您的对象转换为地图。

然后,如果您将对象用作 JSON,它将返回预期的 json。

例如

class Client 
    String name


Client client = new Client(name: 'Richard Waters')
println (["Name":"test"] as grails.converters.JSON)

在地图名称中,N 是大写字母,也是以 json 格式返回的大写字母。 希望对你有帮助!!

【讨论】:

JSON 中没有“标准命名约定”。如果 Groovy 的 JSON 实现不能与现有的 JSON 格式互操作,那么实现是不完整的。

以上是关于如何在 Groovy 中的 JSON 转换器方法中保留字母大小写?的主要内容,如果未能解决你的问题,请参考以下文章

groovy jsonOutput将中文转为Unicode的问题

如何将Groovy String集合转换为Java String Array?

grails groovy - 将xml转换为JSON

如何自动将 Java 代码转换为 Groovy 代码 [关闭]

如何将 gradle 中的 groovy 任务转换为 Gradle Kotlin DSL 以生成 pom.xml?

无法在groovy中拆分jsonobject中的值