Groovy JSONBuilder 问题

2024-01-01

我正在尝试将 JsonBuilder 与 Groovy 结合使用来动态生成 JSON。我想创建一个 JSON 块,例如:

{
    "type": {
        "__type": "urn",
        "value": "myCustomValue1"
    },
    "urn": {
        "__type": "urn",
        "value": "myCustomValue2"
    },
    "date": {
        "epoch": 1265662800000,
        "str": "2010-02-08T21:00:00Z"
    },
    "metadata": [{
        "ratings": [{
            "rating": "NR",
            "scheme": "eirin",
            "_type": {
                "__type": "urn",
                "value": "myCustomValue3"
            }
        }],
        "creators": [Jim, Bob, Joe]
    }]
}

我写过:

def addUrn(parent, type, urnVal) {
    parent."$type" {
        __type "urn"
        "value" urnVal
    }
}

String getEpisode(String myCustomVal1, String myCustomVal2, String myCustomVal3) {
    def builder = new groovy.json.JsonBuilder()
    def root = builder {
        addUrn(builder, "type", myCustomVal1)
        addUrn(builder, "urn", "some:urn:$myCustomVal2")
        "date" {
            epoch 1265662800000
            str "2010-02-08T21:00:00Z"
        }
       "metadata" ({
                ratings ({
                        rating "G"
                        scheme "eirin"
                        addUrn(builder, "_type", "$myCustomVal3")
                })
                creators "Jim", "Bob", "Joe"                    
        })
    }

    return root.toString();
}

但我遇到了以下问题:

  1. 每当我打电话addUrn,字符串中不返回任何内容。我是否误解了如何在 Groovy 中使用方法?
  2. 返回的字符串中没有任何值封装在双(或单)引号中。
  3. 每当我使用{,我在返回值中得到“_getEpisode_closure2_closure2@(insert hex)”。

我的语法有问题吗?或者有人可以向我指出一些使用简单值之外的方法和/或示例的示例/教程(例如数组中的嵌套值)。

注意:这是一个淡化的例子,但我试图保持给我带来问题的领域的复杂性。


  1. 你必须使用delegate in addUrn方法而不是 通过builder您正在从事的工作。

  2. 这是因为你正在做一个toSting() or toPrettyString() on root代替builder.

  3. 如果遵循 #2 则解决。

Sample:

def builder = new groovy.json.JsonBuilder()
def root = builder {
              name "Devin"
              data {
                 type "Test"
                 note "Dummy"
              }
              addUrn(delegate, "gender", "male")
              addUrn(delegate, "zip", "43230")
           }


def addUrn(parent, type, urnVal) {
    parent."$type" {
        __type "urn"
        "value" urnVal
    }
}

println builder.toPrettyString()

Output:-

{
    "name": "Devin",
    "data": {
        "type": "Test",
        "note": "Dummy"
    },
    "gender": {
        "__type": "urn",
        "value": "male"
    },
    "zip": {
        "__type": "urn",
        "value": "43230"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy JSONBuilder 问题 的相关文章

随机推荐

  • Oracle/SQL - 合并来自“不相关”不相关表的计数

    假设我有两张桌子GOOD and BAD存储小部件生产的记录 我的桌子看起来像这样 Widget Good Widget A Y Widget A Y Widget B Y Widget Bad Widget A Y Widget B Y
  • 您是否必须取消订阅组件中的 QueryList?

    当使用 ContentChildren or ViewChildren用于监听 DOM 元素更改的装饰器 我是否必须取消订阅QueryList 例如 Component export class ParentComponent implem
  • 在wpf中动态添加列到DataGrid

    我目前正在处理自定义画布 并且必须添加一个表格 所以我认为 dataGrid 就可以了 所以我想创建一个 Table from 数据网格 用户可以通过它在运行时将表格添加到画布 到目前为止 我已经尝试使用列表填充 DataGrid 并成功了
  • 有效地重新格式化数据布局

    我有几个 Excel 电子表格 其数据布局如下raw data https i stack imgur com QOju9 jpg company company1 company2 company3 currency Y E 1 1 20
  • Java 中的 Byte 和 Short 的要点(我已阅读其他问题)

    我的问题是 如果我从 Java 反汇编中得到它 当我使用 byte a 3 b 5 System out println a b 实际上会使用 int 而不是 byte 此外 所有本地内存插槽都是 4B 就像堆栈插槽一样 我意识到分配一个字
  • 为什么我的角度应用程序在更改支持 mat-tree 的数据后变得非常慢?

    我正在实现角度 材料树组件并遇到一些问题 保存对树的更改后 我正在重置支持树的数据 有效 但是应用程序变得非常慢 扩展节点可能需要大约 8 秒 更奇怪的是 实际操作数据源的代码是在其他地方运行的 例如向树中添加新的子项 我们希望 UI 更新
  • 在 iOS 上显示按比例间隔的数字(而不是等宽/表格)

    我在 iOS 中渲染数字 目标为 7 及以上 方法是将它们存储在 NSAttributedString 中并使用 drawAtPoint 进行渲染 我正在使用 Helvetica Neue 我注意到这样画出的数字的位数不成比例 字形都具有相
  • 在 Kivy 中将图像对象作为按钮背景传递

    在Kivy中 有没有办法将图像对象作为按钮背景而不是图像文件名传递 button background normal属性仅接受字符串 我想自定义图像属性 例如allow stretch False 如果成功 我如何指定按钮内的图像对齐方式
  • 对于 64 位应用程序,.NET 使用 WSAStartup 是否安全?

    对于 64 位应用程序 NET Framework 版本和 WSAData 结构的本机 Win32 版本之间不匹配 因为字段的顺序不同 我已经复制了 NET 版本以用于我们基于 C 的产品 但一位同事担心我造成了内存损坏 使用 DllImp
  • Python+OpenCV+py2app:numpy.core.multiarray 导入失败

    环境 mac os x 10 7 5 xcode 4 2 1 python 2 7 5 opencv 2 4 7 py2app 0 7 3 我正在尝试使用 py2app 打包一个基于 opencv 的简单 python 脚本 但构建的应用程
  • 如何使工具提示保持不变,以便可以单击其中的链接

    我有 jQuery 插件 Tooltipsy 来生成链接的工具提示 在此工具提示中 我有相关对象的其他链接 我希望它在初始链接上方弹出 并在我将鼠标移至其上单击链接时停留 这可能吗 有谁知道该怎么做 我没能让它保持打开状态 并且无法再等待
  • Express 中出现意外的“结束后写入”错误

    我正在尝试通过我的服务器代理来自客户端的 api 调用以获取某些第三方服务 其原因是 CORS 问题并在服务器端添加密钥 我通常通过以下方式完成它 app use someService req res gt let url https e
  • 如何在 JavaScript 中计算整数中的 1 位

    如何计算一个整数中 1 的位数 假设你有二进制数11100000 基本上开头有 3 个布尔标志 相应的十进制表示法是224 想知道如何获取该整数并以某种方式循环它以添加它开头的 1 的数量 像这样的事情 var int 224 var n
  • 我的下拉菜单的内容关闭得太快

    我正在构建一个网站 但遇到了这个问题 当我将鼠标悬停在 li 元素上并显示子菜单时 我无法单击其中的任何内容 因为它关闭得非常快 我发现了类似的问题和解决方案已经在这里尝试实现它们但没有成功 JSFiddle 链接 http jsfiddl
  • 在循环中使用glue和dplyr获取关卡名称

    我试图在循环中使用 dplyr 和胶水从表中获取级别名称 我使用循环是因为我获得大量变量来获取分组表和单个表 我在下面显示了一个示例 library dplyr library glue var c vs am for i in var b
  • 本地负载测试:无法打开负载测试结果数据库

    我正在使用 VS2012 创建一些负载测试 我可以使用 无 存储类型运行测试 但是当我将其更改为 数据库 存储类型时 我收到了可怕的错误 无法打开负载测试结果数据库 检查是否 加载由连接字符串指定的测试结果数据库 测试控制器 或本地机器 指
  • 如何在android中圆化textview一侧的角

    我想将文本视图的唯一一侧舍入 例如从左上角开始舍入 从右上角舍入一圈 我使用此代码 但这不起作用
  • 如何估计方法的执行时间?

    如果需要超过两秒才能完成并在另一个线程上重新启动它 我需要取消方法执行 那么 有没有什么方法 回调机制 HACK 我可以让方法通知我它超过了 2 秒的时间限制 在 C 中检查网络驱动器是否存在并超时 https stackoverflow
  • 具有特定 JsonConverter 的 MVC3 控制器

    这是设置 我有一些 MVC 控制器 旨在由 jQuery ajax 请求使用 一个正常的请求看起来有点像这样 ajax Solicitor AddSolicitorToApplication data putData type POST c
  • Groovy JSONBuilder 问题

    我正在尝试将 JsonBuilder 与 Groovy 结合使用来动态生成 JSON 我想创建一个 JSON 块 例如 type type urn value myCustomValue1 urn type urn value myCust