2010-04-01 57 views
6

我想從兩個字段構建JSON。說,我有一個對象列表(方),我只需要傳遞2個項目作爲JSON對。使用對象的屬性的部分屬性渲染JSON

def list = getMyList() //it contains 2 party objects 
partyTo = array { 
    for (i in list) { 
     x partyId: i.id 
     y partyName: i.toString()   
    } 
} 

JSON字符串是

{ 
    "partyTo": [ 
     {"partyId":12}, 
     {"partyName":"Ar"}, 
     {"partyId":9}, 
     {"partyName":"Sr"} 
    ] 
} 

當我在客戶端提取它,它將被視爲4個對象。我希望作爲2個對象,使用下面的格式。

{ 
    "partyTo": [ 
     {"partyId":12, "partyName":"Ar"}, 
     {"partyId":9 , "partyName":"Sr"} 
    ] 
} 

我得到4個對象,可能是因爲我使用數組來構建JSON。我是groovy和JSON的新手,所以不確定正確的語法組合。任何幫助高度讚賞。 謝謝。

回答

8

你說得對,問題在於你的數組的構造。爲了得到所需的輸出,你需要地圖數組,一個地圖的每個對象,並得到你需要到該列表添加到另一個地圖整體的「partyTo」對象:

def parties = [ 
      ["id":12 , "name":"Ar", "privateField": "a"], 
      ["id":9 , "name":"Sr", "privateField": "b"] 
    ] 

    def toRender = parties.collect { party-> 
     ["partyId": party.id, "partyName":party.name] 
    } 

    def result = ["partyTo" : toRender] 
    render result as JSON 

換句話說,一個Grails地圖變成JSON對象,Grails數組和列表變成JSON中的數組

如果你總是想渲染你的「派對」對象,你可以考慮使用ObjectMarshaller。在這篇文章中的更多詳細信息在rendering JSON using object marshallers

+0

感謝您的幫助..我infact找到了關於ObjectMarshaller相同的職位,並且工作得很好。我仍然對上述解決方案感到好奇。非常感謝。最好的祝福。 – bsr 2010-04-02 11:37:06