Json 如何将值与值列表进行比较

Json 如何将值与值列表进行比较,json,rest,groovy,soapui,Json,Rest,Groovy,Soapui,我试图执行一个断言,其中区域id的每个实例都与请求中输入的区域id相匹配。例如,如果在请求中输入了数字“736”,那么对于响应中区域id的每个实例,它们都应该是“736”。但是,当我在资产上执行时,它会声明它为false,我认为这是因为输出在列表中,所以==不起作用。如何使请求和列表中的每个项目形成匹配的响应 代码如下: def hotelregionid = json.regions.hotels.regionId assert hotelregionid != null def hotelr

我试图执行一个断言,其中区域id的每个实例都与请求中输入的区域id相匹配。例如,如果在请求中输入了数字“736”,那么对于响应中区域id的每个实例,它们都应该是“736”。但是,当我在资产上执行时,它会声明它为false,我认为这是因为输出在列表中,所以==不起作用。如何使请求和列表中的每个项目形成匹配的响应

代码如下:

def hotelregionid = json.regions.hotels.regionId
assert hotelregionid != null
def hotelregionid_request = messageExchange.modelItem.testStep.testCase.testSuite.getPropertyValue("regionid")
assert hotelregionid.every {it == hotelregionid_request} -- this is where the assertion fails.

log.info hotelregionid
log.info hotelregionid_request
它输出的错误消息是:

assert hotelregionid.every {it == hotelregionid_request} | | | false [[xxx,xxxx,xxxx,xxxx,xxx,xxx,xxx,xxx,xxx]]
当我注释掉断言时提供的log.info与我将值为xxx的数字相同:

[[xxx,xxx,xxx,xxx,xxx,xxx]]-这是给hotelregionid的

xxx-这是酒店区域ID_请求

原始响应:

{
    "xxx": [{
        "regionId": xxx,
        "xxx": [{
                "xxx": [{

                    "regionId": xxx

                }],

                "xxx": xxx
            },

            {
                "xxx": [{
                    "regionId": xxx
                }],
                "xxx": xxx
            }
        ]

    }]
谢谢

从您的输出来看,hotelregionid是一个列表列表

因此,您可以使用“展平”将其恢复为整数列表:

assert hotelregionid.flatten().every {it == hotelregionid_request}
下面是脚本断言

请注意,请在下面的变量中定义期望值

编辑:根据OP的完整回复更新答案


你能显示原始响应吗?现在就抓取原始响应…上面的Rao是否正确?这是一个完整的结构还是你减少了一些信息?如果你削减开支,解决办法可能行不通。因此,请提供正确的响应。这是一个精简版本,因为响应非常大,我可以向您发送完整的响应吗?我在包含您的方法时收到此错误tim:没有方法签名:java.lang.String.Flatte适用于参数类型:值:[]可能的解决方案:takeint、wait、intern、println
//Change the value as needed
def expectedRegionId = 736
assert context.response, 'Response is null or empty'

def json = new groovy.json.JsonSlurper().parseText(context.response)

def sb = new StringBuffer()
json.regions.each { region ->
    assert region.regionId == expectedRegionId
    region.hotels.each { hotel ->
        assert hotel.regionId == expectedRegionId
    }
}