我正在尝试从两个字段构建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的新手,所以不确定正确的语法组合。任何帮助高度赞赏。 感谢。
答案 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
的这篇文章的更多详情