json - 在 Groovy/Grails 中生成的 JSON 中插入嵌套项

标签 json grails groovy

我正在使用 Grails 2.1 将 JSON 呈现为我创建的 RestFul API 的一部分。基于 SqlServer 表的 Domain 类如下所示:

字符串名字
字符串姓氏
字符串官方地址1
字符串官方地址2
字符串首选地址1
字符串首选地址2
(ETC。)。 。 。

它返回与此类似的 JSON:

{
“名字”:“乔”,
"lastName": "山",
"officialAddress1": "1100 Wob Hill",
"officialAddress2": "公寓 # 3",
"preferredAddress1": "1100 摇摆巷。",
"preferredAddress2": "公寓 3。"
}

它工作正常,但客户希望我以这种方式嵌套结果:
{
“名字”:“乔”,
"lastName": "山",
首选地址{
"preferredAddress1": "1100 摇摆巷。",
"preferredAddress1": "公寓 3。"
},
官方地址{
"officialAddress1": "1100 Wob Hill",
"officialAddress2": "公寓 # 3"
}
}

我的问题是,由于域类和数据库的结构不是返回这种类型的嵌套结果,我如何在返回的 JSON 中轻松更改它?我是否必须放弃基于数据库/域对象反省 JSON 的方式并执行某种自定义转换器?

最佳答案

我是 stackoverflow 的新手,我希望我不会弄乱它,但我想我知道你需要什么。在 bootstrap.groovy 文件中,您可以找到“def init = { servletContext -> ”行 放在那里这样的东西:

JSON.registerObjectMarshaller(YourDomainName) {
def returnArray = [:]
returnArray['firstName'] = it.firstName
returnArray['lastName'] = it.lastName
returnArray['preferredAddress'] = [it.preferredAddress1 ,it.preferredAddress2]
returnArray['officialAddress'] = [it.officialAddress1 ,it.officialAddress2]
return returnArray
}

现在,当您像 Grails 一样使用 JSON 进行渲染时,它将在 bootstrap 中查找并 按照您的要求呈现域。

希望这有帮助

关于json - 在 Groovy/Grails 中生成的 JSON 中插入嵌套项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9627841/

相关文章:

c# - 当我将 json 字符串反序列化为 C# 对象时,类为空

grails - IntelliJ IDEA Grails 3.0 错误

grails - Groovy/Grails没有方法签名

unit-testing - 如何在带有模拟域的grails单元测试中测试默认排序

groovy - 从 Jenkinsfile 中的函数调用阶段

java - 创建名称为 'transactionManagerPostProcessor' : Initialization of bean failed 的 bean 时出错

java - 如何在 java 中将 xml 转换为 .json 文件

ios - 如何使用 SWIFT3 解析此 JSON

javascript - 使用 vue-i18n 插件时出现错误 - "Cannot find module ./en.json"

grails - 在Grails 3中参数化UrlMappings