Soapui如何从json响应中提取特定值

Soapui如何从json响应中提取特定值,json,groovy,soapui,Json,Groovy,Soapui,我正在尝试提取dsId的值,但无法这样做 请查看以下详细信息 我正在使用的Groovy脚本是: import groovy.json.JsonSlurper def response = messageExchange.response.responseContent log.info response def slurper = new JsonSlurper() def json = slurper.parseText response log.info json log.info js

我正在尝试提取
dsId
的值,但无法这样做

请查看以下详细信息

我正在使用的Groovy脚本是:

import groovy.json.JsonSlurper 
def response = messageExchange.response.responseContent
log.info response

def slurper = new JsonSlurper()
def json = slurper.parseText response
log.info json
log.info json.New England Schools__NE Schools$.dsId
但在误差以下

下面是我的json响应。我还想提取ZIP的值

{
  "New England Schools__NE Schools$": {
    "dsId": "ds_608",
    "type": "Account",
    "numericCols": [
      "ZIP",
      "Count Free Lunch",
      "Count Reduced Lunch",
      "Total Lunch Pgm",
      "Total Students",
      "PreKindergarten",
      "Kindergarten",
      "Grade 1",
      "Grade 2",
      "Grade 3",
      "Grade 4",
      "Grade 5",
      "Grade 6",
      "Grade 7",
      "Grade 8",
      "Grade 9",
      "Grade 10",
      "Grade 11",
      "Grade 12"
    ],
    "data": null,
    "AggNumericData": [
      {
        "ZIP": 19949795,
        "Count Free Lunch": 263596,
        "Count Reduced Lunch": 71799,
        "Total Lunch Pgm": 331987,
        "Total Students": 1796594,
        "PreKindergarten": 36553,
        "Kindergarten": 151898,
        "Grade 1": 164370,
        "Grade 2": 169418,
        "Grade 3": 173748,
        "Grade 4": 175505,
        "Grade 5": 179357,
        "Grade 6": 177978,
        "Grade 7": 174655,
        "Grade 8": 170192,
        "Grade 9": 178423,
        "Grade 10": 162045,
        "Grade 11": 147564,
        "Grade 12": 133368
      }
    ],
    "MinMax": [],
    "dsData": "Account Id#%#Territory#%#District#%#Area#%#Region#%#objname#%#~ID~#%#~Lat-Lon Linked~#%#~Latitude~#%#~Longitude~#%#~Lat-Lon Zip~#%#School Name#%#Address#%#City#%#State#%#ZIP#%#ZIP4#%#School Type#%#Status#%#School Level#%#Count Free Lunch#%#Count Reduced Lunch#%#Total Lunch Pgm#%#Total Students#%#PreKindergarten#%#Kindergarten#%#Grade 1#%#Grade 2#%#Grade 3#%#Grade 4#%#Grade 5#%#Grade 6#%#Grade 7#%#Grade 8#%#Grade 9#%#Grade 10#%#Grade 11#%#Grade 12#%#Territory1#%#Region1#%#lat#%#lon#%#terrid\r\n15709#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15709#%#True#%#41.934711#%#-72.770021#%#06026#%#R. DUDLEY SEYMOUR SCHOOL#%#185 HARTFORD AVENUE#%#EAST GRANBY#%#CT#%#6026#%#9520#%#1#%#1#%#2#%#0#%#0#%#0#%#131#%#0#%#0#%#0#%#0#%#0#%#60#%#71#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#Hartford, CT#%#New England#%#5151204.33051376#%#-8100721.57141633#%#3\r\n15707#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15707#%#True#%#41.934894#%#-72.730656#%#06026#%#EAST GRANBY HIGH SCHOOL#%#95 SOUTH MAIN STREET#%#EAST GRANBY#%#CT#%#6026#%#9550#%#1#%#1#%#3#%#0#%#0#%#0#%#219#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#57#%#55#%#53#%#54#%#Hartford, CT#%#New England#%#5151231.26605957#%#-8096340.03625871#%#3\r\n15708#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15708#%#True#%#41.934894#%#-72.730656#%#06026#%#EAST GRANBY MIDDLE SCHOOL#%#95 SOUTH MAIN STREET#%#EAST GRANBY#%#CT#%#6026#%#9550#%#1#%#1#%#2#%#0#%#0#%#0#%#201#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#67#%#73#%#61#%#0#%#0#%#0#%#0#%#Hartford, CT#%#New England#%#5151231.26605957#%#-8096340.03625871#%#3\r\n15706#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15706#%#True#%#41.944215#%#-72.732696#%#06026#%#ALLGROVE SCHOOL#%#33 TURKEY HILLS ROAD#%#EAST GRANBY#%#CT#%#6026#%#9570#%#1#%#1#%#1#%#0#%#0#%#0#%#275#%#3#%#69#%#65#%#82#%#56#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#Hartford, CT#%#New England#%#5152627.52929053#%#-8096567.12801993#%#3\r\n15710#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15710#%#True#%#41.944215#%#-72.732696#%#06026#%#HOMEBOUND#%#33 TURKEY HILL ROAD#%#EAST GRANBY#%#CT#%#6026#%#674#%#4#%#3#%#4#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#Hartford, CT#%#New England#%#5152627.52929053#%#-8096567.12801993#%#3\r\n15923#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15923#%#True#%#42.0027#%#-72.942#%#06027#%#HOMEBOUND#%#30 SOUTH ROAD#%#EAST HARTLAND#%#CT#%#6027#%#9710#%#4#%#3#%#4#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#0#%#Hartford, CT#%#New England#%#5161383.89953631#%#-8119866.29744296#%#3\r\n15922#%#Hartford, CT#%#New England#%#Unassigned#%#Unassigned#%#Account#%#15922#%#True#%#42.0027#%#-72.942#%#06027#%#HARTLAND ELEMENTARY SCHOOL#%#30 SOUTH ROAD#%#EAST HARTLAND#%#CT#%#6027#%#9710#%#1#%#1#%#1#%#0#%#0#%#0#%#2#%#0#%#25#%#17#%#26#%#29#%#37#%#36#%#38#%#35#%#40#%#0#%#0#%#0#%#0#%#Hartford, CT#%#New England#%#5161383.89953631#%#-8119866.29744296#%#3\r\n16335#%#}

在dsData中,您可以看到有些列名称带有值,如何提取特定于列的数据?

您得到了一个非常小的错误

两件事:

  • 属性具有空格字符:因此需要用引号括起来
  • 还有需要转义的
    $
下面的语句可以检索所需的
dsId

将您的上一句话更改为:

log.info json.New England Schools\u___NE Schools$.dsId

至:

log.info json.“新英格兰学校\$”.dsId

希望这有帮助

更新

刚才注意到您想要提取
ZIP
值,该值恰好是数组
AggNumericData
中第一个元素的属性。早些时候,你帖子中的这个问题不可见,或者我忽略了。因此,在我的回答中更新同样的内容

以下是获得相同结果的声明:

log.info​json.“新英格兰学校\$”.AggNumericData[0].ZIP​

更新2:上述问题的作者,他无法在评论中收集数据。那么,在这里添加如何获得两者。注意,我必须使用最少的数据来复制它,因为只提供了
json
的一部分

获取两个请求数据


嗨,谢谢你,伙计,首先非常感谢你的快速回复,我可以通过你的解决方案找到dsId,但是当尝试获取zip时,类似于此启动的错误失败了:Script17.groovy:9:变量名无效。必须以字母开头,但是:​json。在[9:10]@第9行第10列。log.info​json.“新英格兰学校\$”.AggNumericData[0]。ZIP^org.codehaus.groovy.syntax.SyntaxException:变量名无效。必须以字母开头,但是:​json。在[9:10]@第9行第10列。根据您的示例,在org.codehaus.groovy.control.CompilationUnit$15.call(CompilationUnit.java:760)上,我得到了给定语句的zip。但您的实际请求可能与您提供的请求不同?这是什么原因造成的?你想提供更多信息吗?嗨,非常奇怪,当我只使用邮政编码时,它起作用,但当我同时使用两者时,它不起作用嗨,它起作用了,我删除了现有的断言并创建了一个新的断言,它起作用了,谢谢你的帮助,伙计,你是一个了不起的更新答案,屏幕截图HI@rao plz看看这个