问题标签 [jsonslurper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4841 浏览

json - 通过 Groovy 中的嵌套 Json 访问和循环

所以我已经被这个问题困扰了很长一段时间了。

我正在处理一些以 JSON 形式提供并使用 groovy通过WSLITE检索的数据。到目前为止,处理 json 结构和查找数据没有问题,因为 WSLITE 提供的 Web 服务响应被重新调整为 JsonSlurper 的实例。我现在遇到了一些情况,其中 json 响应的结构取决于我查询的内容。

结构如下所示:

如您所见,variants 节点是一个对象,其中包含另一个嵌套对象,该对象包含更多嵌套对象。这里的问题是变体节点有时拥有多个 OBJECT 但总是至少有一个。与 subVariant 节点相同。此外,我现在没有提前指定(数字)节点的名称。因此我必须动态地构建路径。

由于 Json 在 groovy 中被处理为地图、列表和数组,我认为我能够做到这一点:

但返回 null

在像这样静态访问数据时:

只是像这样钉住变体

也可以正常工作。它打印整个变体树的第一个(也是唯一一个)内容。

我的问题是:为什么会这样?

似乎我无法通过索引来处理下一个对象......我是对的吗?我该怎么办?

提前致谢。

0 投票
1 回答
55 浏览

json - Grails 1.3.9 解析 JSON 文件

我正在使用 Grails 1.3.9 开发一个项目,我需要解析一个JSON文件并读取一些值。这可以很容易地完成,JsonSlurper但仅支持 Grails 1.8 和更高版本。有没有其他技术可以实现这一目标?

0 投票
3 回答
1673 浏览

json - 在 Groovy 中获取具有随机名称的单个节点的 JSON 子节点

在 Groovy(不是 Grails)中,我想获得这样一个项目的颜色:

“8436”号码是动态的,但始终只有一个。

我不能使用 JsonSlurper 的json.8436.color语法,因为数字是硬编码的。

如何获得颜色?

0 投票
1 回答
2367 浏览

recursion - 在 Groovy 中递归提取 JSON 字段值

我需要实现一种方法,该方法将扫描特定的 JSON 字符串targetField并返回该字段的值(如果存在),或者null(如果不存在):

此解决方案必须是递归的,并且可以在(分层)JSON 字符串中的任何嵌套级别上工作。它也需要适用于 JSON 数组。

到目前为止我最好的尝试:

这仅适用于顶级(非嵌套)JSON 字段。我问谷歌大神如何JsonSlurper递归使用,但找不到任何有用的东西。这里有什么想法吗?

0 投票
3 回答
1604 浏览

json - 如何在 Groovy 中使用 JsonSlurper 提取 JSON 参数

我在 SOAPUI 中编写了以下 groovy 脚本来对 JSON 响应执行断言。

我很难编写断言以提取和断言 Weather > main > Clouds 属性和 JSON 响应的值。

有人可以协助更正我的代码以提取我想要的值吗?

谢谢!

0 投票
2 回答
7414 浏览

json - 如何使用变量从使用 Groovy 的 JSON 响应中提取值?

我正在尝试通过使用存储在名为“jsonFieldName”的变量中的值的位置从 JSON 响应中提取自行车品牌“Cannondale”

或者,我可以使用以下语法成功提取品牌价值:

但是,我想将元素的位置保留在变量中。原因是,我希望能够在 Json 响应上迭代多个断言作为我的自动化套件的一部分。

有人可以建议如何做到这一点吗?

下面是我目前将位置存储在变量中的片段。但它不起作用并且总是将品牌返回为“Null”:(谢谢。

0 投票
3 回答
1970 浏览

json - 如何使用 JSONSlurper 在 groovy 中对 JSON 数组响应执行断言

我正在尝试使用存储在名为“jsonFieldName”的变量中的值的位置,从 JSON 数组响应中提取名称值“Acura”。

下面是我尝试执行此操作的代码,但是,每次我运行脚本时,SOAPUI 都会返回错误:“java.lang.NullPointerException: Cannot get property 'name' on null object error at line: 156”

有人可以建议如何做到这一点吗?

0 投票
1 回答
698 浏览

json - 使用 JSONSlurper 在列表中传递二级 JSON

我在我的一个 Jenkins 插件中使用 Groovy 和 JSON Slurper。下面是我正在使用的代码:

这就是我的测试套件的定义方式:

目前,如果我使用上面的代码,我的列表包含以下值:

网站1 网站2

但是我希望它包含如下值: 选择Website2

烟雾默认Testsuite2

有人可以建议一种方法吗?我尝试了下面的代码,但它不起作用:

0 投票
1 回答
2914 浏览

groovy - JsonSlurper 执行失败

我正在尝试使用 JsonSlurper 从不同的文件中输入变量。但它在第二次执行时失败了。有人可以帮助我吗?

它从一步失败Jenkins_File_Path = readFile ( "${Local_Path_App}" + "/Jenkinsfile" )

主程序

GlobalSettings_Java.json

詹金斯文件

错误日志

java.io.NotSerializableException: org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860) 的 groovy.json.internal.LazyMap org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65) ) 在 org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56) 在 org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50) 在 org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride( RiverObjectOutputStream.java:179) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) 在 java.util.HashMap.internalWriteEntries(HashMap.java:1785) 在 java.util.HashMap.writeObject(HashMap.java:1362 ) 在 sun.reflect.GeneratedMethodAccessor469.invoke(Unknown Source) 在 sun。reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271) at org .jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller .java:1032)在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988) 在 org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) 在 org.jboss.marshalling。 River.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) 在 org.jboss.marshalling。River.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988) at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)在 org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) 在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988) 在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject (RiverMarshaller.java:967)在 org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) 在 org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) 在 org.jboss。 marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller。java:988) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65) at org.jboss.marshalling.river .BlockMarshaller.writeObject(BlockMarshaller.java:56) at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50) at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179) at java。 io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344) 在 java.util.TreeMap.writeObject(TreeMap.java:2438) 在 sun.reflect.GeneratedMethodAccessor475.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl. java:43) 在 java.lang.reflect.Method。在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976) 的 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976) 的调用(Method.java:498) .marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032) at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java :988) org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854) org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58) org.jboss.marshalling.AbstractMarshaller.writeObject( AbstractMarshaller.java:111) 在 org.jenkinsci.plugins.workflow.support.pickles。serialization.RiverWriter.writeObject(RiverWriter.java:132) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:433) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup. java:412) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:357) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:78) 在 org. jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:236) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:224) 在 org.jenkinsci.plugins.workflow。 cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:63) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at hudson.remoting.SingleLaneExecutorService$1。在 jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent 运行(SingleLaneExecutorService.java:112)。 FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang .Thread.run(Thread.java:745) 原因:发生的异常:在对象 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@7abaf96e 中的字段线程中的字段程序中的字段 e 中的字段调用者的字段局部变量中: 失败run(ContextResettingExecutorService.java:28) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent .ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 原因:异常发生:在字段 e 的字段调用者的字段本地人中,在对象 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@7abaf96e 的字段线程中的字段程序中完成:失败run(ContextResettingExecutorService.java:28) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent .ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 原因:异常发生:在字段 e 的字段调用者的字段本地人中,在对象 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@7abaf96e 的字段线程中的字段程序中完成:失败ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 原因:一个异常发生:在对象 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@7abaf96e 中的字段线程中的字段程序中的字段 e 中的字段调用者的字段本地人中完成:失败ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 原因:一个异常发生:在对象 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@7abaf96e 中的字段线程中的字段程序中的字段 e 中的字段调用者的字段本地人中完成:失败失败失败

0 投票
0 回答
131 浏览

json - Groovy 中 JSON 的资源高效解析

我有一个与输出 JSON 响应的 API 接口的程序。

考虑到我想从 JSON 中提取一些特定的键和值以在我的程序中使用,但稍后我可能想对此进行扩展,解析 JSON 以在程序中使用的最节省资源的方法是什么?我正在使用 JsonSlurper 来处理输出。

  • 创建一个配置选项来列出我想从 JSON 中提取哪些键。遍历该列表并创建一个 Map 来保存数据,然后在整个程序中使用这些数据。

  • 将所需的键硬编码到一个类中,并具有从 JSON 对象访问相应数据的方法,然后将键和值分配给final变量。EG: public final String orderId = jsonParser.findByKey("orderId"),然后迭代 JSON 文档以找到该键

还是有更好的实践方法来做到这一点?理想情况下,它应该尽可能容易地扩展,以防从 JSON 中提取更多数据。