You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSONObject转为LinkedHashMap列表并构建HashMap<Integer, CustomObject>

问题:将JSONObject转换为List并构建目标Map

我通过以下代码获取JSONObject:

JSONObject jsonObject = restTemplate().getForObject(endPointUrl , JSONObject.class)

对应的JSON结构为:

{"content":[{"id":12345,"code":"89879","Option1":"Raw","Option2":"Pure","Option3":"Mix","pborrow":true}, 
{"id":34234,"code":"89877","Option1":"Pure","Option2":"Raw","Option3":"Raw","pborrow":true},
{"id":8876,"code":"534554","Option1":"Raw","Option2":"Mix","Option3":"Mix","pborrow":true}
}]}

目标是将这个JSON转换成List<LinkedHashMap>,再遍历构建HashMap<Integer, CustomObject>——其中键是每条数据的code值(转为Integer类型),CustomObject由Option1、Option2、Option3的字段值构建。

之前尝试的转换代码报错:

List<Map> myJsonList = rootJsonObject.get("content") != null ? (List)  ((LinkedHashMap)rootJsonObject.get("content")) : null;

正确的转换方案

方法1:直接安全类型转换

问题根源是错误地把content对应的JSON数组强转为LinkedHashMap,实际上content本身就是数组类型,直接转为List即可:

List<LinkedHashMap<String, Object>> myJsonList = null;
if (jsonObject.containsKey("content")) {
    myJsonList = (List<LinkedHashMap<String, Object>>) jsonObject.get("content");
}

注:主流JSON解析库(如Jackson、Gson)默认会把JSON数组解析为List,JSON对象解析为LinkedHashMap,该转换符合默认解析规则。

方法2:字段过滤式转换(更安全)

如果想直接过滤掉不需要的字段(如id、pborrow),可以先转为JSONArray再逐个处理:

List<LinkedHashMap<String, Object>> myJsonList = new ArrayList<>();
if (jsonObject.containsKey("content")) {
    JSONArray contentArray = jsonObject.getJSONArray("content");
    for (int i = 0; i < contentArray.length(); i++) {
        JSONObject itemObj = contentArray.getJSONObject(i);
        LinkedHashMap<String, Object> itemMap = new LinkedHashMap<>();
        // 只提取需要的4个字段
        itemMap.put("code", itemObj.getString("code"));
        itemMap.put("Option1", itemObj.getString("Option1"));
        itemMap.put("Option2", itemObj.getString("Option2"));
        itemMap.put("Option3", itemObj.getString("Option3"));
        myJsonList.add(itemMap);
    }
}

后续构建responseMap的优化代码

拿到正确的myJsonList后,可使用增强for循环简化构建逻辑:

HashMap<Integer, CustomObject> responseMap = new HashMap<>();
for (LinkedHashMap<String, Object> objectMap : myJsonList) {
    String option1 = (String) objectMap.get("Option1");
    String option2 = (String) objectMap.get("Option2");
    String option3 = (String) objectMap.get("Option3");
    Integer code = Integer.parseInt((String) objectMap.get("code"));
    
    responseMap.put(code, new CustomObject(code, option1, option2, option3));
}

内容的提问来源于stack exchange,提问作者Anuj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:05:25