如何在 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?
如何自动将 Java 代码转换为 Groovy 代码 [关闭]