【问题标题】:Inserted Nested Item in Generated JSON in Groovy/Grails在 Groovy/Grails 中生成的 JSON 中插入嵌套项
【发布时间】:2012-03-09 01:45:02
【问题描述】:

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

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

返回类似于此的 JSON:

{
“名字”:“乔”,
“姓氏”:“山”,
"officialAddress1": "1100 Wob Hill",
"officialAddress2": "Apt. #3",
"preferredAddress1": "1100 Wobbly Lane.",
"preferredAddress2": "3 号公寓。"
}

工作正常,但客户希望我以这种方式嵌套结果:
{
“名字”:“乔”,
“姓氏”:“山”,
首选地址 {
"preferredAddress1": "1100 Wobbly Lane.",
"preferredAddress1": "3 号公寓。"
},
官方地址 {
"officialAddress1": "1100 Wob Hill",
"officialAddress2": "Apt. # 3"
}
}

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

【问题讨论】:

    标签: json grails groovy


    【解决方案1】:

    我是这个 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
    }
    

    现在,当您像使用 JSON 一样使用渲染时,grails 将在 bootstrap 和 按照您的要求呈现域。

    希望对你有帮助

    【讨论】:

    • 我刚刚删除了我之前的评论,因为它不是 100% 正确的。这很有帮助!为了得到我需要的确切结果,我在语法上做了一些不同的操作,但我会在这个页面上更新它。再次感谢!
    【解决方案2】:

    发布的答案是正确的。我只是想添加我所做的细微更改以获得所需的确切结果:

    谢谢!做到了。我最初认为它不能完全按照我的需要工作,但我错了。我稍微改变了语法以获得我需要的结果。

            returnArray['preferredAddress'] = [address1: it.preferredAddress1?.trim(),
                address2: it.preferredAddress2?.trim(),
                address3: it.preferredAddress3?.trim(),
                city: it.preferredCity,
                state: it.preferredState,
                postCode: it.preferredPostCode,
                country: it.preferredCountry
                ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多