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

使用Rest Assured从JSON API获取唯一属性

公羊信厚
2023-03-14

我有一个API,它会给出这样的JSON响应

[{
"records": {
    "0": {
        "id": 123,
        "emp_type": "P",
        "emp_level": "8",
        "emp_id": "12345"
    },
    "1": {
        "id": 132,
        "emp_type": "Q",
        "emp_level": "1",
        "emp_id": "1234589"
    },
    "2": {
        "id": 132,
        "emp_type": "Q",
        "emp_level": "1",
        "emp_id": "1234589"
    },


    "3": {
        "id": 134,
        "emp_type": "Q",
        "emp_level": "3",
        "emp_id": "1231"
    }
}

}]

我想从这个响应中找到所有唯一的emp_type属性。我尝试了以下方法,但没有一种有效-

方法-1

List<Map<String, String>> companies = response.jsonPath().getList("records");
        System.out.println(companies.get(0));

方法-2

List<Map<String, String>> companies = response.jsonPath().getList("records");
    System.out.println(companies.get(0).get("emp_type"));

接近-3

 Map<String, String> company = response.jsonPath().getMap("records");
        System.out.println(company.get("emp_type"));

方法-4

String username = response.jsonPath().getString("records[0]");
    System.out.println(username.indexOf(1));

方法-5

    String value = response.path("records").toString();
    System.out.println(value);

编辑-1:修复JSON。

共有3个答案

杜建章
2023-03-14

请尝试以下代码:

                try {   
                    URL url = new URL("http://mysafeinfo.com/api/data?list=englishmonarchs&format=json");
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    BufferedReader read = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    String line = read.readLine();
                    String json = "";
                    while(line!=null) {
                        json += line;
                        line = read.readLine();
                    }   

                    JSONArray jsonArray = new JSONArray(json);
                    for(int i=0; i<jsonArray.length(); i++) {

                       JSONObject a = jsonArray.getJSONObject(i);

                    }

                String a = jsonArray.toString();
                request.setAttribute("json",a);
                request.getRequestDispatcher("NewFile.jsp").forward(request, response);

            } catch (Exception e) {
                e.printStackTrace();
                out.write(e.toString());
            }

在jsp文件中:

<script type="text/javascript"//-->
	var a='${json}';
	var test = '<%= (String) request.getAttribute("json") %>';
	
	var json =JSON.parse(test);

	var i;
	for (i = 0; i < json.length; i++) { 
	 document.write( "<tr><td>"+json[i].id+"</td>");
	 document.write("<td>"+ json[i].nm+"</td>");
	 document.write("<td>" +json[i].cty+"</td>");
	 document.write( "<td>"+json[i].hse+"</td>");
	 document.write( "<td>"+json[i].yrs + "</td></td>");
	 }
	
	</script>
赵浩邈
2023-03-14

如评论部分所述,您可以首先获得“emp_type”值,然后保持唯一。为此,您可以执行以下操作

从JSON检索emp_types列表

List<String> emp_types = 
Arrays.asList(response.jsonPath().getString("emp_type").split("\\s*,\\s*")); 

保留响应中的唯一值

1) 通过将列表转换为哈希集(一个集只允许唯一值)

Set<String> unique_emp_types = new HashSet<String>(emp_types );

或者

如果希望将您的唯一值放入一个列表中,并且您使用Java8,那么您可以使用JavaStreamAPI

2) 列表

舒枫涟
2023-03-14

您可以这样尝试:

JsonPath jsonPath = new JsonPath(json);
List<Map<String, Map<String, Object>>> list = jsonPath.getList("records");
Set<String> uniqueValues = new HashSet<>();
for (Map<String, Map<String, Object>> map : list) {
  for (Map<String, Object> m : map.values()) {
    uniqueValues.add(String.valueOf(m.get("emp_type")));
  }
}
for (String unique : uniqueValues) {
  System.out.println(unique);
}
 类似资料:
  • 接口说明 获取shp素材属性唯一值 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /wish3dearth/api/material/shp/v1.0.0/queryShpGeometryType 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 columnName string query 是 列名 mate

  • 接口说明 获取shp素材属性唯一值 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /wish3dearth/api/material/sh

  • 问题内容: 我有这段代码块,将我的数组中的“类别”显示到JQuery简单列表中。 效果很好,但是如果“篮球”类别中有3个项目,该类别将出现3次。 我怎样才能使它们只出现一次?谢谢。 这是代码: 这是我的数组的代码: 问题答案: 我不知道您的数组是如何构建的(因此我的示例可能需要根据您的需要进行一些修改),但是您可以编写一些代码,首先将您的独特类别收集到一个新数组中: jsFiddle演示 将包含您

  • 问题内容: 我在一个基于Java的系统中工作,我需要为视觉显示中的某些元素设置一个ID。一类元素是字符串,因此我决定使用String.hashCode()方法来获取这些元素的唯一标识符。 但是,我遇到的问题是,如果id为负,并且经常返回负值,那么我正在borks中工作的系统。一种快速的解决方案是仅在哈希码调用周围使用Math.abs()来确保得到肯定的结果。我想知道这种方法是,两个不同的元素具有相

  • 问题内容: 我想从以下列表中获取唯一值: 我需要的输出是: 此代码有效: 我应该使用更好的解决方案吗? 问题答案: 首先正确声明你的列表,以逗号分隔。你可以通过将列表转换为一组来获得唯一值。 如果进一步将其用作列表,则应执行以下操作将其转换回列表: 另一种可能(可能更快)的可能性是从头开始使用集合而不是列表。然后你的代码应为: 正如已经指出的那样,集合不保持原始顺序。如果需要,则应查找有序集合实现

  • 问题内容: 我有一个看起来像这样的列表列表: 删除重复列表的最佳方法是什么?使用上面的示例,我正在寻找会产生这种情况的代码: 我最初以为我可以使用,但这似乎不适用于列表列表。我还看到了一个使用的示例,但是代码对我来说并不完全清楚。谢谢您的帮助! 问题答案: uniq_animal_groups = set(map(tuple, animal_groups)) 尽管您将得到一组元组而不是一组列表,但