Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在动态字符串值';解析以获取JSON中的特定节点值_Json_Groovy - Fatal编程技术网

如何在动态字符串值';解析以获取JSON中的特定节点值

如何在动态字符串值';解析以获取JSON中的特定节点值,json,groovy,Json,Groovy,上面的代码帮助我使用Groovy获取节点值“WorkItems[0].WorkItemExternalId”。以下是答复 { "TotalRecordCount": 1, "TotalPageCount": 1, "CurrentPage": 1, "BatchSize": 10, "WorkItems": [ { "WorkItemUId": "4336c111-7cd6-4938-835c-3ddc89961232", "WorkIt

上面的代码帮助我使用Groovy获取节点值
“WorkItems[0].WorkItemExternalId”
。以下是答复

{
   "TotalRecordCount": 1,
   "TotalPageCount": 1,
   "CurrentPage": 1,
   "BatchSize": 10,
   "WorkItems": [   {
      "WorkItemUId": "4336c111-7cd6-4938-835c-3ddc89961232",
      "WorkItemId": "20740900",
      "StackRank": "0",
      "WorkItemTypeUId": "00020040-0200-0010-0040-000000000000",
      "WorkItemExternalId": "79853"
}
我需要将字符串
“WorkItems[0].WorkItemExternalId”
(从excel文件读取)和多个其他此类节点动态附加到
“slurperresponse”
,以获取节点的值,而不是直接硬编码为
slurperresponse.WorkItems[0].WorkItemExternalId


尝试使用append和“+”运算符,但出现编译错误。还有什么其他方法可以做到这一点呢?

slurperrsponse
是一个对象,而不是一个字符串,这就是串联不起作用的原因

Json Slurper使用输入字符串创建一个对象。此对象本质上是动态的,您可以访问它,可以向其添加字段或更改现有字段。挫伤在这里不起作用

以下是一个例子:

import groovy.json.*

​def text = '{"total" : 2, "students" : [{"name": "John", "age" : 20}, {"name": "Alice", "age" : 21}] }'
def json = new JsonSlurper().parseText(text)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
json.total = 3 // alter the value of the existing field
json.city  = 'LA' // add a totally new field 
json.students[0].age++ // change the field in a list 
println json​
这将产生以下输出:

[total:3, students:[[name:John, age:21], [name:Alice, age:21]], city:LA]
现在,如果我没弄错的话,您希望动态添加一个新学生,输入的是您从Excel中读取的文本。下面是一个例子:

json.students << new JsonSlurper().parseText('{"name" : "Tom", "age" : 25}')
// now there are 3 students in the list

slurperrsponse
是一个对象,而不是字符串,这就是串联不起作用的原因

Json Slurper使用输入字符串创建一个对象。此对象本质上是动态的,您可以访问它,可以向其添加字段或更改现有字段。挫伤在这里不起作用

以下是一个例子:

import groovy.json.*

​def text = '{"total" : 2, "students" : [{"name": "John", "age" : 20}, {"name": "Alice", "age" : 21}] }'
def json = new JsonSlurper().parseText(text)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
json.total = 3 // alter the value of the existing field
json.city  = 'LA' // add a totally new field 
json.students[0].age++ // change the field in a list 
println json​
这将产生以下输出:

[total:3, students:[[name:John, age:21], [name:Alice, age:21]], city:LA]
现在,如果我没弄错的话,您希望动态添加一个新学生,输入的是您从Excel中读取的文本。下面是一个例子:

json.students << new JsonSlurper().parseText('{"name" : "Tom", "age" : 25}')
// now there are 3 students in the list

您能用“+”运算符表示您的尝试吗?在当前形式中,问题并不十分清楚……请这样说:log.info(slurperresponse.+“.WorkItems[0].WorkItemExternalId”)也尝试了$(slurperresponse.+”.WorkItems[0].WorkItemExternalId),但没有成功。请显示您使用“+”运算符的尝试?在当前形式中,问题并不十分清楚……请这样说:log.info(slurperresponse.+“.WorkItems[0].WorkItemExternalId”)也尝试了$(slurperresponse.+”.WorkItems[0].WorkItemExternalId),但没有成功标记,谢谢您的回答。我并没有向json添加任何内容,而是从excel文件中读取需要验证的节点(如附件所示)。在您的示例中,如果我需要读取值json.city,其中城市部分来自excel。我该怎么做?试过你提到的上述方法。PFB响应。def wi=“WorkItems[0]。WorkItemExternalId”log.info slurperresponse.WorkItems[0]。WorkItemExternalId-->返回所需的值log.info slurperresponse['wi']-->返回null log.info slurperresponse.get('wi')-->返回null最后两个方法在我的情况下似乎不起作用。不确定我要去哪里,您需要全名,包括大小写:println json.get('students')[0]。get('name')。这印的是“约翰”。您需要slurperresponse.get('WorkItems')[0]。get('WorkItemExternalId')slurperresponse.get('WorkItems')[0]。get('WorkItemExternalId')似乎工作正常。但是,将('WorkItems')[0].get('WorkItemExternalId')放入变量失败。如何将数据('WorkItems')[0].get('WorkItemExternalId')放入变量中?不能像这样使用JSonSlurper。结果是一个具有属性和方法的对象。如果您想构建字符串形式的“路径”,可以使用JSonPath库Hi Mark,谢谢您的回复。我并没有向json添加任何内容,而是从excel文件中读取需要验证的节点(如附件所示)。在您的示例中,如果我需要读取值json.city,其中城市部分来自excel。我该怎么做?试过你提到的上述方法。PFB响应。def wi=“WorkItems[0]。WorkItemExternalId”log.info slurperresponse.WorkItems[0]。WorkItemExternalId-->返回所需的值log.info slurperresponse['wi']-->返回null log.info slurperresponse.get('wi')-->返回null最后两个方法在我的情况下似乎不起作用。不确定我要去哪里,您需要全名,包括大小写:println json.get('students')[0]。get('name')。这印的是“约翰”。您需要slurperresponse.get('WorkItems')[0]。get('WorkItemExternalId')slurperresponse.get('WorkItems')[0]。get('WorkItemExternalId')似乎工作正常。但是,将('WorkItems')[0].get('WorkItemExternalId')放入变量失败。如何将数据('WorkItems')[0].get('WorkItemExternalId')放入变量中?不能像这样使用JSonSlurper。结果是一个具有属性和方法的对象。如果您想以字符串形式构造“路径”,可以使用JSonPath库