java - 使用 JAVA 和 Selenium 的 REST ASSURED 计算数组的数量并访问 JSON 响应中的特定数组

标签 java json rest-assured

我正在使用 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/

    相关文章:

    java - 我们可以在java中有一个整数数组的优先级队列吗

    java - Java中从字符串中提取数字

    java - 使用 iText 在 PDF 文件中获取图像 DPI

    java - 无法通过 Java 代码连接到服务器。获取 javax.net.ssl.SSLHandshakeException : Received fatal alert: handshake_failure

    java - 如何通过 TestNG 参数化配置环境 URL?

    java - java处理外部库的正确方法(使用eclipse)

    javascript - 如何在 ColdFusion 文件中使用 DeserializeJSON 方法

    java - 读取和写入精确格式的 JSON 文件

    javascript - 我在使用 for 循环多次调用 json 时遇到问题

    java - 如何使用response.path计算响应(Json)的总和?