我正在尝试在soapui中使用Groovy脚本作为我的Json响应,并查找我的响应中是否存在该属性。我用If语句如下。对于我用来检查它的属性名称,即使属性不存在,也只返回true语句。我不确定我在这里做错了什么。
import groovy.json.JsonSlurper
def slurper = new JsonSlurper()
def i = 0
responseContent = testRunner.testCase.getTestStepByName("DAY").getPropertyValue("response")
slurperresponse = new JsonSlurper().parseText(responseContent)
if(slurperresponse.day_details.activities.to_locans) {
println "************************"
res = "Crew_base found"
} else {
res = "Crew_base not found"
}
答案 0 :(得分:1)
这是由一些事情聚集在一起造成的:
上面的评论显示了问题:
有效的属性名称
Fri Apr 22 16:01:19 EDT 2016:INFO:<java.util.ArrayList@260080 elementData=[[NYP, NYP]] size=1 modCount=1>
对于无效的属性名称
Fri Apr 22 16:01:35 EDT 2016:INFO:<java.util.ArrayList@3e0 elementData=[[null, null]] size=1 modCount=1>
在两种情况下,您都会看到结果是两个项目的列表(列表) - 所以总是评估为真。
作为地图,从您打印该变量转储的最终评论中,它看起来像这样:
[
day_details: [
[
fra_status:'', block_training_day:0, holiday_name:'', activities:[
[ from_location:'WAS', craft:'Conductor', departure_datetime:'2016-04-26T13:02:00-04:00', end_datetime:'2016-04-26T16:30:00-04:00', crew_base:'NYP', ends_next_day:false, description:'Unit', train_number:172, to_location:'NYP', arrival_datetime:'2016-04-26T16:30:00-04:00', zone:'Zone 2', start_datetime:'2016-04-26T12:52:00-04:00' ],
[ from_location:'NYP', craft:'Engineer', to_location:'WAS', zone:'Zone 2', start_datetime:'2016-04-26T17:55:00-04:00' ]
]
]
]
]
阅读它,您会看到day_details
和activities
都是嵌套列表(因此响应中的两个列表 - 所以groovy导航到activities
内的每个地图并查看对于键to_locans
- 没有找到键,它返回null,并将这两个空值放入列表中。
将if检查更改为以下内容将按照您的预期工作(假设您只想考虑每个列表中的第一个元素):
if (slurperresponse.day_details[0].activities[0].to_locans){