使用对象的部分属性在GRAILS中呈现JSON

时间:2010-04-01 18:29:35

标签: json grails

我正在尝试从两个字段构建JSON。说,我有一个对象列表(party),我只需要传递2个项目作为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的新手,所以不确定正确的语法组合。任何帮助高度赞赏。 感谢。

1 个答案:

答案 0 :(得分:9)

你是对的,问题在于你的数组的构造。要获得所需的输出,您需要一组地图,每个对象一个地图,并获得整个“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

的这篇文章的更多详情