Я пытаюсь создать 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. Я плохо знаком с отличным и JSON, таким образом, не уверенный в правильных комбинациях синтаксиса. Любая справка высоко ценится.спасибо.
Вы правы в том, что проблема заключается в построении вашего массива. Чтобы получить требуемый результат, вам понадобится массив карт, по одной карте для каждого объекта, а чтобы получить общий объект 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 .Подробнее в этом посте о рендеринге JSON с использованием маршаллеров объектов