Groovy / Grails JSON преобразование сложных объектов и коллекций - PullRequest
2 голосов
/ 08 июля 2010

У меня есть следующее отображение дерева категорий:

class Category {

  String name
  static belongsTo = [parent: Category]
  static hasMany = [categories: Category]

}

Я хочу сделать все дерево категорий и исключить поле parent из рендеринга.

render category as JSON 

отображает только первый уровень иерархии и не отображает имена дочерних категорий.Т.е. имея следующее дерево:

Root-> cat2-> cat4 cat3

У меня есть

{"class":"project.Category",
 "id":1,
 "categories":[{"class":"Category","id":2},
               {"class":"Category","id":3}],
 "name":"Root",
 "parent":null}

Я не хочу атрибуты "class" и "parent" ихотите увидеть данные cat4 в этом дереве.

Существует ли какая-то специальная библиотека или плагин или, возможно, можно настроить стандартный конвертер JSON или класс домена?

Ответы [ 3 ]

2 голосов
/ 08 июля 2010

Вы можете попробовать создать собственный JSON через JSONBuilder:

render(builder:'json') {
  id(category.id)
name(category.name)
  categories {
    category.categories?.each {
      categories (
        id: it.id,
        name: it.name
      )
    }
  }
}
0 голосов
/ 08 июля 2010

JSON-lib - это библиотека, которая предлагает жесткий контроль над форматом объектов Java / Groovy, сериализованных в JSON. От документы :

Начиная с версии 2.0 Json-lib имеет встроенную поддержку Groovy, что означает, что POGO можно преобразовывать в JSON и обратно, так же, как вы делаете это сейчас с POJO.

0 голосов
/ 08 июля 2010

Я думаю, вы должны сделать это сами: - /

что-то вроде:

def categoryToMap( cat ) {
  def a = [ id:cat.id, name:cat.name ]
  if( cat.categories ) a << [ categories:cat.categories.collect { categoryToMap( it ) } ]
  a
}

тогда что-то вроде:

render categoryToMap( category ) as JSON
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...