2012-03-09 47 views
2

我正在使用Grails 2.1將JSON渲染爲我創建的RestFul API的一部分。域類的基礎上,SqlServer的表,如下所示:在Groovy/Grails中生成的JSON中插入嵌套項目

字符串的firstName
字符串的lastName
字符串officialAddress1
字符串officalAddress2
字符串preferredAddress1
字符串preferredAddress2
(等)。 。 。

它返回JSON與此類似:

{
「名字」: 「喬」,
「姓氏」: 「山」,
「officialAddress1」: 「1100 WOB山」,
「officialAddress2」:「Apt。#3」,
「preferredAddress1」:「1100 Wobbly Lane」,
「preferredAddress2」:「Apartment 3」
}

它工作正常,但客戶希望我窩在這種方式的結果:
{
「名字」: 「喬」,
「姓氏」: 「山」,
preferredAddress {
「preferredAddress1」:「1100 Wobbly Lane」,
「preferredAddress1」:「Apartment 3」。
},
officialAddress {
「officialAddress1」: 「1100 WOB山」,
「officialAddress2」: 「公寓#3」
}
}

我的問題是,因爲領域類,和數據庫,都不是以某種方式返回這種類型的嵌套結果的結構我怎麼才能輕鬆地在我返回的JSON中更改這個?我是否必須放棄以數據庫/域對象爲基礎來回流JSON的方式,並做一些自定義的轉換器?

回答

4

我是新來的這個stackoverflow的東西,我希望我不會亂它,但我想我知道你需要什麼。在BootStrap.groovy中的文件,你會發現「高清的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將看在引導和 按照你的要求呈現域名。

希望這可以幫助

+0

我剛剛刪除了我以前的評論,因爲它不是100%正確的。這非常有幫助!爲了得到我需要的確切結果,我在語法上有點不同,但我會在此頁面上更新它。再次感謝! – jseals 2012-03-13 18:30:54

1

發佈的答案是正確的。我只是想添加我做出的輕微更改以獲得我需要的確切結果:

謝謝!那樣做了。我原本認爲它不能滿足我的需求,但我錯了。我稍微改變了語法來獲得我需要的結果。

 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 
      ]