Я шукаю спосіб додати коріння об'єктів до мого JSON в grails (2.4.5). Як правило, Grails перетворює список JSON таких об'єктів таким чином:
[{"id":1,"title":"Catan","description":"Catan"}]
Але мені потрібно це виглядати так:
{"games": [{"id":1,"title":"Catan","description":"Catan"}]}
В ідеалі я хотів би налаштувати власний маршалл, який я створив для цього, але я не знаю, як це зробити:
class GameMarshaller {
void register() {
JSON.registerObjectMarshaller(Game) { Game node ->
return [
id : node.id,
title : node.title,
description : node.description
]
}
}
}
Відповіді:
1 для відповіді № 1Я відповів на це тут, це лише про те, щоб кореневий елемент мав бути a карта і додавши список в нього з ключем games
, а потім конвертуйте його в a JSON.
Отже, це має працювати для вашої справи:
class GameMarshaller {
void register() {
def games = Game.list().collect{ node ->
[
id : node.id,
title : node.title,
description : node.description
]
}
def result = ([games: games] as JSON)
}
}
0 для відповіді № 2
Чи може це допомогти?
def o = new JSONObject()
def arr = new JSONArray()
def g = new JSONObject()
games.each{
g.put("id",it.id)
...
arr.add(g)
}
o.put("games",arr)
respond o