Groovy / Grails JSON转换复杂对象和集合

时间:2010-07-08 11:41:46

标签: json serialization grails groovy

我有以下映射表示类别树:

class Category {

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

}

我想要做的是渲染所有类别树并从渲染中排除字段parent

render category as JSON 

仅呈现第一级层次结构,并且不呈现子类别的名称。 即有以下树:

根 - > cat2-> CAT4       cat3

我有

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

我不想要“class”和“parent”属性,并希望在此树中看到cat4数据。

是否有一些特殊的lib或插件,或者可以配置标准的JSON转换器或域类?

3 个答案:

答案 0 :(得分:2)

您可以尝试通过JSONBuilder构建自定义JSON:

render(builder:'json') {
  id(category.id)
name(category.name)
  categories {
    category.categories?.each {
      categories (
        id: it.id,
        name: it.name
      )
    }
  }
}

答案 1 :(得分:0)

我认为你必须自己做: - /

类似的东西:

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

答案 2 :(得分:0)

JSON-lib是一个库,可以严格控制序列化为JSON的Java / Groovy对象的格式。来自the docs

  

从版本2.0开始,Json-lib集成了Groovy,这意味着POGO可以转换为JSON并返回,就像你现在使用POJO一样。