Grails GSON JSON视图

时间:2017-05-23 12:22:55

标签: json grails view gson

我想生成与此类似的JSON输出:

var json = {
        id: "1",
        name: "AAA",
        children: [{
            id: "2",
            name: "BBB",
            data: {
                relation: "<b>Connections:</b><ul><li> AAA <div>(relation: direct)</div></li><li> CCC <div>(relation: direct)</div></li></ul>"
            },
            children: [{
                id: "3",
                name: "CCC",
                data: {
                    relation: "<b>Connections:</b><ul><li> BBB <div>(relation: direct)</div></li></ul>"
                },
                children: []
            }]
        }, ....

这是我到目前为止所做的:

grails create-domain-resource json.Object
class Object{
    String name
    String relation
    static hasMany = [children: Object]

    public String getData() {
        def writer = new StringWriter()

_object.gson

//json g.render(hero)
json {
    //data hero.data
    data: {relation hero.relation}
    name hero.name
}

问题 我无法生产:

 data: {
                    relation: "<b>Connections:</b><ul><li> BBB <div>(relation: direct)</div></li></ul>"
                },

问题: 1)我已阅读官方文档,但我无法找到如何做瞬态字段 2)混合json和xml / html的最佳方法是什么。 3)如何将json代码传递给另一个视图变量

提前谢谢

1 个答案:

答案 0 :(得分:1)

您可以在以下位置查看gson视图的官方文档:

http://views.grails.org/latest/#_json_view_api

域类

class Object{
    String name
    String relation
    static hasMany = [children: Object]

    public String getRelation() {

模板1 object.gson

import json.Object

model {
    Object object
}

json tmpl.object(object)

模板2 _object.gson

import json.Object

model {
    Object object
}

json {
    id object.id
    data(relation: object.relation)
    name object.name
    children g.render(object.children,[ excludes:['exclude_fields']])
    //children g.render(object.children,[resolveTemplate: false]) // one to many relations - avoid circular error
    //object2 object.book.name // one to one relations
}

<强> ObjectController

import grails.plugin.json.view.JsonViewTemplateEngine
import org.springframework.beans.factory.annotation.Autowired

    @Autowired
    JsonViewTemplateEngine templateEngine
    def test() {
        def t = templateEngine.resolveTemplate('/object/object')
        def writable = t.make(object: Object.get(params.id))
        def sw = new StringWriter()
        writable.writeTo( sw )
        return [json:sw]
    }

问题:

1)我已阅读官方文档,但我无法找到如何进行瞬态字段 - 您可以使用对象或getter的有效值的命名参数

2)混合json和xml / html的最佳方法是什么。 - **我猜您可以查看:http://docs.groovy-lang.org/latest/html/gapi/groovy/json/StreamingJsonBuilder.html **

3)如何将json代码传递给另一个视图变量 - **在objectController **上检查上面的代码