我有一个记录列表:
{
"StatusCode": 200,
"Result": [
{
"Id": 15015600,
"Amount": 97.41,
"CreatedDate": "10/17/2018",
},
{
"Id": 15015602,
"Amount": 682.11,
"CreatedDate": "10/17/2018",
},
and so on...
当我知道Amount和CreatedDate时,我试图制作一条语句以返回“ Id”值。
int Id = given()
.when()
.get(/EndPoint))
.then()
.body("Result.findAll { it.Amount==97.41 }.CreatedDate", hasItems("10/17/2018"));
这有可能吗?
答案 0 :(得分:1)
如果您将记录列表作为列表而不是json字符串,则可以直接调用
def id = YourResponse.Result.find{it.Amount==97.41 && it.CreatedDate=="10/17/2018"}
它将返回您第一次找到符合搜索条件的结果。如果您调用findAll而不是使用相同的闭包进行查找,则将具有所有匹配项的列表。
答案 1 :(得分:0)
很难判断您是否已经解析了JSON,因此我也提供了执行此操作的代码。这是普通的Groovy,而不是特定于“放心”的。
import groovy.json.JsonSlurper
def text = '''
{
"StatusCode": 200,
"Result": [
{
"Id": 15015600,
"Amount": 97.41,
"CreatedDate": "10/17/2018",
},
{
"Id": 15015602,
"Amount": 682.11,
"CreatedDate": "10/17/2018",
}
]
}'''
def json = new JsonSlurper().parseText(text)
assert json.Result.find{ it.Amount == 97.41 && it.CreatedDate == '10/17/2018' }.Id == 15015600
答案 2 :(得分:0)
解决方案:
int i = response.path("Result.find{it.Amount.toDouble()==293.51 && it.CreatedDate=='10/26/2018'}.Id");
我需要在查询中添加“ toDouble()”。 it.Amount.toDouble()== 293.51,不是it.Amount == 293.51。添加toDouble()后,查询将按预期工作。