/ / Додати об'єктну корені до JSON - json, grails, маршування

Додайте коріння об'єктів до JSON - json, grails, marshalling

Я шукаю спосіб додати коріння об'єктів до мого 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