问题标签 [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.
json - 通过 Groovy 中的嵌套 Json 访问和循环
所以我已经被这个问题困扰了很长一段时间了。
我正在处理一些以 JSON 形式提供并使用 groovy通过WSLITE检索的数据。到目前为止,处理 json 结构和查找数据没有问题,因为 WSLITE 提供的 Web 服务响应被重新调整为 JsonSlurper 的实例。我现在遇到了一些情况,其中 json 响应的结构取决于我查询的内容。
结构如下所示:
如您所见,variants 节点是一个对象,其中包含另一个嵌套对象,该对象包含更多嵌套对象。这里的问题是变体节点有时拥有多个 OBJECT 但总是至少有一个。与 subVariant 节点相同。此外,我现在没有提前指定(数字)节点的名称。因此我必须动态地构建路径。
由于 Json 在 groovy 中被处理为地图、列表和数组,我认为我能够做到这一点:
但返回 null
在像这样静态访问数据时:
只是像这样钉住变体
也可以正常工作。它打印整个变体树的第一个(也是唯一一个)内容。
我的问题是:为什么会这样?
似乎我无法通过索引来处理下一个对象......我是对的吗?我该怎么办?
提前致谢。
json - Grails 1.3.9 解析 JSON 文件
我正在使用 Grails 1.3.9 开发一个项目,我需要解析一个JSON
文件并读取一些值。这可以很容易地完成,JsonSlurper
但仅支持 Grails 1.8 和更高版本。有没有其他技术可以实现这一目标?
json - 在 Groovy 中获取具有随机名称的单个节点的 JSON 子节点
在 Groovy(不是 Grails)中,我想获得这样一个项目的颜色:
“8436”号码是动态的,但始终只有一个。
我不能使用 JsonSlurper 的json.8436.color
语法,因为数字是硬编码的。
如何获得颜色?
recursion - 在 Groovy 中递归提取 JSON 字段值
我需要实现一种方法,该方法将扫描特定的 JSON 字符串targetField
并返回该字段的值(如果存在),或者null
(如果不存在):
此解决方案必须是递归的,并且可以在(分层)JSON 字符串中的任何嵌套级别上工作。它也需要适用于 JSON 数组。
到目前为止我最好的尝试:
这仅适用于顶级(非嵌套)JSON 字段。我问谷歌大神如何JsonSlurper
递归使用,但找不到任何有用的东西。这里有什么想法吗?
json - 如何在 Groovy 中使用 JsonSlurper 提取 JSON 参数
我在 SOAPUI 中编写了以下 groovy 脚本来对 JSON 响应执行断言。
我很难编写断言以提取和断言 Weather > main > Clouds 属性和 JSON 响应的值。
有人可以协助更正我的代码以提取我想要的值吗?
谢谢!
json - 如何使用变量从使用 Groovy 的 JSON 响应中提取值?
我正在尝试通过使用存储在名为“jsonFieldName”的变量中的值的位置从 JSON 响应中提取自行车品牌“Cannondale”
或者,我可以使用以下语法成功提取品牌价值:
但是,我想将元素的位置保留在变量中。原因是,我希望能够在 Json 响应上迭代多个断言作为我的自动化套件的一部分。
有人可以建议如何做到这一点吗?
下面是我目前将位置存储在变量中的片段。但它不起作用并且总是将品牌返回为“Null”:(谢谢。
json - 如何使用 JSONSlurper 在 groovy 中对 JSON 数组响应执行断言
我正在尝试使用存储在名为“jsonFieldName”的变量中的值的位置,从 JSON 数组响应中提取名称值“Acura”。
下面是我尝试执行此操作的代码,但是,每次我运行脚本时,SOAPUI 都会返回错误:“java.lang.NullPointerException: Cannot get property 'name' on null object error at line: 156”
有人可以建议如何做到这一点吗?
json - 使用 JSONSlurper 在列表中传递二级 JSON
我在我的一个 Jenkins 插件中使用 Groovy 和 JSON Slurper。下面是我正在使用的代码:
这就是我的测试套件的定义方式:
目前,如果我使用上面的代码,我的列表包含以下值:
网站1 网站2
但是我希望它包含如下值: 选择Website2
:
烟雾默认Testsuite2
有人可以建议一种方法吗?我尝试了下面的代码,但它不起作用:
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 中的字段调用者的字段本地人中完成:失败失败失败
json - Groovy 中 JSON 的资源高效解析
我有一个与输出 JSON 响应的 API 接口的程序。
考虑到我想从 JSON 中提取一些特定的键和值以在我的程序中使用,但稍后我可能想对此进行扩展,解析 JSON 以在程序中使用的最节省资源的方法是什么?我正在使用 JsonSlurper 来处理输出。
创建一个配置选项来列出我想从 JSON 中提取哪些键。遍历该列表并创建一个 Map 来保存数据,然后在整个程序中使用这些数据。
将所需的键硬编码到一个类中,并具有从 JSON 对象访问相应数据的方法,然后将键和值分配给
final
变量。EG:public final String orderId = jsonParser.findByKey("orderId")
,然后迭代 JSON 文档以找到该键
还是有更好的实践方法来做到这一点?理想情况下,它应该尽可能容易地扩展,以防从 JSON 中提取更多数据。