Je voudrais rendre un type complexe, en utilisant la méthode de rendu JSON dans Grails, similaire à la sortie JSON ci-dessous:Comment faire pour rendre dynamiquement JSON complexe avec Grails 1.2?
{"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"}]}]}
Et je l'ai essayé de faire cela avec le code suivant, où l'auteur et du livre sont classes de domaine contenant les propriétés id et name et où Author hasMany Books (association).
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
}
}
}
}
}
Il fonctionne très bien avec seuls auteurs, mais pas lorsque je tente de parcourir les livres de chaque auteur et de rendre ceux aussi bien, le code sûr.
Des idées?
question Mise à jour avec code final
Merci à la réponse de Dave J'ai fini avec le code suivant qui fonctionne comme prévu:
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