我正在使用 Rest Assured API 和 Java 通过我的 selenium 自动化程序执行 POST 调用操作。 IO 得到如下所述的响应 -
{
"cmsContract": "HA1123",
"groupId": "12345",
"siteId": "4444-AP",
"stateCountyCode": "7978790"
},
{
"cmsContract": "HB2345",
"groupId": "9876",
"siteId": "8888-DK",
"stateCountyCode": "111225"
}
响应中大约有 1000 个或更多 JSON 对象。而且他们没有像“name”或“contractinfo”这样的响应标识符
我的查询:
1. 如何使用 Rest Assured API 结合 JAVA 和 selenium 检索数组的总数(例如从 '{
' 到 '}
' 的数组总数)?
- 如果我必须检索结果集的“
stateCountyCode
”,其中“cmsContract
”为HB2345
,我该怎么做?我希望看到返回值111225
请提出建议。
使用的库-
org.json.JSONObject;
io.restassured.RestAssured;
io.restassured.response.Response;
io.restassured.specification.RequestSpecification;
最佳答案
您可以使用JsonPath
来解析JSON响应。基本上,您可以从字符串、文件或响应中获取 JsonPath
类。
来自字符串:
JsonPath path = JsonPath.from("json string");
来自文件:
JsonPath path = JsonPath.from(new File("path to file"));
来自回复:
Response response; //we get it from RestAssured by calling POST/GET etc
JsonPath path = response.body().jsonPath();
为了获取 JSON 结构中的任何元素,就像您的情况一样,我们必须将其提供给 JsonPath
。 JSON 示例:
{
"data": [
{
"name": "test"
},
{
"name": "test1"
}
]
}
为了访问数组中的元素,我们必须知道它的所有父元素。 结构如下所示:
path.get("parent.child.anotherChild");
对于数组,事情变得更加棘手,因为我们必须使用索引。
上例中的“data”
是一个数组。为了访问 test1
我们将使用:
path.get("data[1].name"); //second element in the array
但这就是标准方法。 JsonPath 是一个更强大的库。
最后回答一下你的问题。我们如何获取数组中 JSON 对象的数量?
List<HashMap<String, Object>> jsonObjects = path.getList("data"); //You have to provide name of the Array's parent. In my case, it's `data`
在上面的 HashMap 列表中,我们在 JSON 数组中拥有所有 JSON 对象。所以你可以使用多种方法来计算元素的数量。
要计算有多少个 JSON 对象,您可以简单地使用 List 的方法:
jsonObjects.size();
使用相同的列表,我们可以获得 cmsContract
值,如您的示例所示。我们寻找值 HB2345
。
标准for
循环。如果您知道如何使用 Streams,则可以使用 Streams。
public String getStateCountryCodeFromCmsContract(String cmsContractValue) {
for (HashMap<String, Object> singleJsonObject : jsonObjects) {
String cmsContract = (String) singleJsonObject.get("cmsContract");
if (cmsContract.equals(cmsContractValue)) {
return (String) singleJsonObject.get("stateCountyCode");
}
}
}
我们迭代每个 JSON 对象,检查 cmsContract
元素的值,如果它等于所需的值 - 返回 stateCountryCode
值。
希望对你有帮助!
关于java - 使用 JAVA 和 Selenium 的 REST ASSURED 计算数组的数量并访问 JSON 响应中的特定数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56062196/