使用Rest-Assured和Java从JSON响应中获取特定数据

问题描述

如何使用Rest Assured获得位于父节点EntityPropertyValue下的子节点ProductPropertyValueUIdProductPropertyValueDisplayName["Name": "PriorityUId"]

下面是代码段

RequestSpecification request = RestAssured.given();
request.header("Content-Type","application/json");
JSONObject requestParams = new JSONObject();
requestParams.put("data","somedata");  
request.body(requestParams.toJSONString()); 
Response response = request.post("url");
 List<Map<String,String>> epv = response.jsonPath().getList("EntityPropertyValues");
        for(int i=0;i<epv.size();i++)
        {
            if(epv.get(i).containsValue("PriorityUId"))
            {
                System.out.println(epv.get(i));
                break;
                
            }
        }

我正在执行sysout,并且得到以下整个数据块作为响应。

{
      "Name": "PriorityUId","Values": [
                    {
                      "EntityPropertyValue": "Critical","ProductPropertyValueUId": "00000019-0000-0000-0000-000000000033","ProductPropertyValueDisplayName": "Blocker"
                    },{
                      "EntityPropertyValue": "Critical","ProductPropertyValueUId": "00000019-0000-0000-0000-000000000034","ProductPropertyValueDisplayName": "Critical"
                    },{
                      "EntityPropertyValue": "High","ProductPropertyValueUId": "00000019-0000-0000-0000-000000000035","ProductPropertyValueDisplayName": "Major"
                    }
      ],"DataTypeUId": "00100002-0007-0000-0000-000000000000","DisplayName": "Priority"
    }

如何捕获要查找的字段?

下面是整个JSON响应

{
  "ProductInstance": "00000000-0000-0000-0000-000000000000","DataTypeUId": null,"EntityPropertyValues": [
    {
      "Name": "ModifiedAtSourceByUser","Values": [],"IsPropertyExists": true
    },{
      "Name": "ModifiedAtSourceOn","Values": []
    },{
      "Name": "PriorityUId","DisplayName": "Priority"
    }
  ]
}

解决方法

获取响应正文的JsonPath视图

JsonPath js = response.jsonPath();

获取EntityPropertyValues的大小

int size = js.getInt("EntityPropertyValues.size()");

遍历数组,直到找到所需的值为止-当前PriorityUId

如果匹配,请使用JsonPath来获取值,

    for (int i = 0; i < size; i++) {
        String detail = js.getString("EntityPropertyValues[" + i + "].Name");
        if (detail.equalsIgnoreCase("PriorityUId")) {
            List<Object> EntityPropertyValue = js
                    .getList("EntityPropertyValues[" + i + "].Values.EntityPropertyValue");
            List<Object> ProductPropertyValueUId = js
                    .getList("EntityPropertyValues[" + i + "].Values.ProductPropertyValueUId");
            List<Object> ProductPropertyValueDisplayName = js
                    .getList("EntityPropertyValues[" + i + "].Values.ProductPropertyValueDisplayName");
            System.out.println("Values for EntityPropertyValue : " + EntityPropertyValue);
            System.out.println("Values for ProductPropertyValueUId : " + ProductPropertyValueUId);
            System.out.println("Values for ProductPropertyValueDisplayName : " + ProductPropertyValueDisplayName);
            break;
        }
    }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...