【问题标题】:rendering JSON in GRAILS with part of the attributes of an object使用对象的部分属性在 GRAILS 中渲染 JSON
【发布时间】:2010-04-01 18:29:34
【问题描述】:

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

【问题讨论】:

    标签: json grails


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助。我实际上找到了关于 ObjectMarshaller 的相同帖子,并且效果很好。我仍然对上述解决方案感到好奇。多谢。最好的问候。
    猜你喜欢
    • 2015-11-28
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2014-01-25
    • 2011-05-17
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多