【问题标题】:Groovy/Grails JSON converting of complex objects and collections复杂对象和集合的 Groovy/Grails JSON 转换
【发布时间】:2010-07-08 11:41:46
【问题描述】:

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

class Category {

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

}

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

render category as JSON 

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

根->cat2->cat4 猫3

我有

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

我不想要“类”和“父”属性,并希望在这棵树中查看 cat4 数据。

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

【问题讨论】:

    标签: json serialization grails groovy


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      自 2.0 版以来,Json-lib 集成了 Groovy 支持,这意味着 POGO 可以转换为 JSON 并返回,就像您现在使用 POJO 一样。

      【讨论】:

      • 问题其实是:HOW to configure this lib?
      • 通过将 JAR 添加到 Grails 应用程序的 /lib 目录,或在 BuildConfig.groovy 中将其指定为依赖项,将其放在类路径中
      【解决方案3】:

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

      类似:

      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
      

      【讨论】:

      • 可以,但是上面的分类树只是简单的例子。但我正在寻求更普遍的,如果可能的话,标准的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多