Я хотел бы визуализировать сложный тип, используя метод визуализации JSON в Grails, аналогично приведенному ниже выводу JSON:
{"authors":[{"id":1,"name":"Author 1","books":[{"id":1,"name":"Book 1"},{"id":2,"name":"Book 2"}]},{"id":2,"name":"Author 2","books":[{"id":1,"name":"Book 1"},{"id":2,"name":"Book 2"}]}]}
И я попытался сделать это с помощью следующего кода, где Author и Book - это доменные классы, содержащие свойства id и name, а Author имеет много книг (ассоциация).
def results = Authors.list()
render(contentType:"text/json") {
authors = array {
for(a in results) {
author id:a.id, name:a.name, books: array = {
def bookresults = Book.findAllByAuthor(a)
for(b in bookresults) {
book id:b.id, name:b.name
}
}
}
}
}
Он отлично работает только с авторами, но когда я пытаюсь перебирать книги каждого автора и отрисовывать их, код не работает.
Есть идеи?
Обновленный вопрос с окончательным кодом
Благодаря ответу Дейва я получил следующий код, который работает, как и ожидалось:
def authors = []
for (a in Author.list()) {
def books = []
def author = [id:a.id, name:a.name, books:books]
for (b in Book.findAllByAuthor(a)) {
def book = [id:b.id, name:b.name]
books << book
}
authors << author
}
def items = [authors:[authors]]
render items as JSON