2010-07-08 119 views
2

我有以下代表類別樹映射:複雜的對象和集合中的Groovy/Grails的JSON轉換

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} 

我不想 「類」 和 「父母」 屬性和希望看到的CAT4數據這棵樹。

是否有一些特殊的lib或插件,或者可能配置標準的JSON轉換器或域類?

回答

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 
+0

這將做,但上述類別樹只是簡單exmapmle。但我正在尋求更普遍的,如果可能的話,標準的方式。 – Vladimir 2010-07-08 12:55:46

0

JSON-lib是提供嚴格控制庫通過序列化爲JSON的Java/Groovy對象的格式。從the docs

從版本2.0 JSON-lib中已經集成了Groovy的支持,這意味着可以的POGO當你使用POJO現在要做轉化成JSON和背部,以同樣的方式。

+0

問題其實是:如何配置這個庫? – Vladimir 2010-07-08 12:54:20

+0

通過將JAR添加到Grails應用程序的/ lib目錄或將其指定爲BuildConfig.groovy中的依賴項 – 2011-03-31 09:32:15

2

你可以嘗試通過JSONBuilder構建自定義JSON:

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