当前位置: 首页 > 知识库问答 >
问题:

从JSON响应中获取特定的数据,使用Rest-Asken和java

薛承基
2023-03-14

我如何才能得到子节点实体属性值产品属性值UId产品属性值显示名称下的父节点[名称: PriorityUId]使用Rest保证?

下面是代码片段

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",
      "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"
    }
  ]
}

共有1个答案

孙承
2023-03-14

获取响应主体的JsonPath视图

JsonPath js = response.jsonPath();

获取实体属性值的大小

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;
        }
    }
 类似资料:
  • 问题内容: 我正在尝试使用其开放的API获取特定Subreddit的顶级提交列表: 不幸的是,这不起作用,因为实际的提交列表嵌套在响应中。如何将数据json数组(在元素中)解组为struct 类型的数组? 问题答案: 创建更多模拟JSON确切形状的结构(就像您的结构一样)。解组到最顶层的结构之一,然后访问该结构的适当成员。

  • 我得到了响应从REST API到响应对象后,通过RestAsared API调用。 响应主体是json,我想从中获取特定的键值吗? 以下是代码 如何在字符串中获取特定的键值?

  • 我有一个创建的sqlite服务器,它保存关于用户的JSON数据。数据看起来像这样: 我也有一个基本的html页面的形式: 我也有使用XMLhttprequest()从服务器获取此数据的代码,但是,该代码只允许获取整个JSON数据并显示所有用户: 我的问题是,如何按用户名搜索用户,因此在HTML表单中,编写Sam Smith,单击按钮后,将只返回第一个用户的信息,而不是数据集中的所有用户?我想在不使

  • 我是RESTWebServices开发新手。目前,我们正在使用Spring Boot、Spring JPA进行服务开发。在REST响应中,我很难返回选择性列。我的问题如下: 我有一个包含10行的用户表,其中包含以下列 Id 我的用户实体对象是: 我需要制定以下两个要求: 返回包含所有列的所有行 返回只有三列(Id、名称和手机号)的所有行 对于第一个需求,我可以通过使用JPA的findAll()来实

  • 我可以很容易地得到消息,但我不能从响应中得到“他”数组。 下面是我的数据模型类 这就是我向服务器发送请求的方式:

  • 我有一个关于从JMeter中的html响应数据中获取某个值的问题。我一直在尝试正则表达式和xpath提取器(见下文),但没有运气。 但也不管用。我一直在考虑使用Beanshell将源代码抓取为字符串并解析数字。有什么更好的方法来抢那个号码吗?如何使用beanshell获取响应数据的源代码?我尝试使用/html的xpath,但没有成功。 多谢