如何在Java中将具有Key Value的JSONArray转换为Map

xzv2uavs  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(219)

我已经能够通过使用RestAssured得到一个Jsonarray作为响应,但是不知道如何将它放在一个Hashmap中,其中一个String显示度量的名称,一个Integer显示相应的值。
来自RestAssured的回复:

{
    "results": [
        {
            "maximum": 3.858
        },
        {
            "minimum": 5.20
        },
        {
            "number": 249
        }
    ]
}

我想要的是一个包含最大值、最小值和编号及其相应值的Map。例如:{"max": 3.858, "min": 5.20, "number": 249 }
到目前为止,我已经尝试了下面的代码,但它似乎不工作。任何帮助将不胜感激。

public static HashMap<String, String> getMinMaxCount(String URL, String query) {

        JsonObject res = getNewRelicAPIResponse(URL, query);
        HashMap<String, String> map = null;
        //System.out.println("Response is : " + res);
        JsonArray metricsArray = res.get("results").getAsJsonArray();
        int arraySize = metricsArray.size();
        String[] strArr = new String[arraySize];
        for (int i = 0; i < arraySize; i++) {
            strArr[i] = String.valueOf(metricsArray.get(i));
            //Create a Hashmap & append the Max, Min & Count
            map  = new HashMap<>();
//            String[] tokens = strArr[i].split(":");
//            String[] tokens2 = tokens[1].split("}");
            map.put("max",strArr[i]);
        }

        return map;
    }
6kkfgxo0

6kkfgxo01#

我就是这么做的:

String res = ... //get response from API
JsonPath jsonPath = new JsonPath(res);
List<Map<String, Object>> list = jsonPath.getObject("results", new TypeRef<>(){});

System.out.println(list);
//[{maximum=3.858}, {minimum=5.2}, {number=249}]

Map<String, String> resultMap = new HashMap<>();

for (Map<String, Object> mapInList : list) {
    for (Map.Entry<String, Object> entryOfMapInList : mapInList.entrySet()) {
        resultMap.put(entryOfMapInList.getKey(), entryOfMapInList.getValue().toString());
    }
}
System.out.println(resultMap);
//{number=249, maximum=3.858, minimum=5.2}

相关问题