grails – 如何在使用JSONBuilder时消除剪切和粘贴闭包

grails – 如何在使用JSONBuilder时消除剪切和粘贴闭包,第1张

概述有没有人知道使用最新版本的Grails JSONBuilder多次发出同一个对象时避免重复闭包的方法? 我有一个包含成员和领导者组的组域对象.我想找到一种方法来排放一个人,而无需切割和粘贴封闭物. def builder = new JSONBuilder() def result = builder.build { array { Group.l 有没有人知道使用最新版本的Grails JSONBuilder多次发出同一个对象时避免重复闭包的方法?

我有一个包含成员和领导者组的组域对象.我想找到一种方法来排放一个人,而无需切割和粘贴封闭物.

def builder = new JsONBuilder()     def result = builder.build {        array {            Group.List().each { Group group ->                g = {                    ID = group.ID                    name = group.name                    members = array {                        group.members?.person?.sort().each { Person person ->                            m = {  // Person closure copy #1                                ID = person.ID                                firstname = person.firstname                                lastname = person.lastname                            }                        }                    }                    leaders = array {                        group.leaders?.person?.sort().each { Person person ->                            l = {   // Person closure copy #2                                ID = person.ID                                firstname = person.firstname                                lastname = person.lastname                            }                        }                    }                }            }        }    }

我已经尝试单独定义闭包但是会导致错误,例如:exception:没有这样的属性:ID for class:.

一些说明:

1)示例中的域对象大大简化.我正在使用JsONBuilder而不是将Group.List()渲染为JsON或渲染Group.List().encodeAsJsON,因为我需要控制对象的哪些部分被编码.

2)我会接受权威的答案,解释为什么不能这样做.

解决方法 使用闭包反复失败后,我有一个解决方案.它不直接使用闭包,而是使用返回地图的闭包.

class Person {     ...    def toMap = {        def map = [:]        map["ID"] = this.ID        map["firstname"] = this.firstname        map["lastname"] = this.lastname        return map    }}def builder = new JsONBuilder() def result = builder.build {    array {        Group.List().each { Group group ->            g = {                ID = group.ID                name = group.name                members = array {                    group.members?.person?.sort().each { Person person ->                         m(person.toMap())                    }                }                leaders = array {                    group.leaders?.person?.sort().each { Person person ->                        l(person.toMap())                    }                }            }        }    }}

m(person.toMap())语法不直观,但它有效并且允许我避免重复自己. This blog entry提供了详细信息并解释了当前Grails JsONBuilder的起源.

总结

以上是内存溢出为你收集整理的grails – 如何在使用JSONBuilder时消除剪切和粘贴闭包全部内容,希望文章能够帮你解决grails – 如何在使用JSONBuilder时消除剪切和粘贴闭包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存