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

如何将含key/value字段的JSONArray转换为Map<String, Object>?

JSONArray转指定结构Map实现方案

需求说明

待转换的JSON数组中每个元素都包含key、value两个字段,需要将每个元素的key字段值作为Map的String类型键,对应元素的value字段值作为Map的Object类型值,最终得到Map<String, Object>结构。

不同JSON库的实现代码

所有方案都做了字段缺失校验,避免运行时空指针,代码可以直接复制使用:

  • Fastjson2 实现(代码最简洁,国内项目常用)
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import java.util.Map;
import java.util.stream.Collectors;

// 解析JSON数组
String jsonArrStr = "// 填入你自己的JSON数组字符串";
JSONArray jsonArray = JSONArray.parseArray(jsonArrStr);

// 核心转换逻辑
Map<String, Object> resultMap = jsonArray.stream()
        .map(item -> (JSONObject) item)
        // 过滤掉缺失key/value字段的异常元素
        .filter(item -> item.containsKey("key") && item.containsKey("value"))
        .collect(Collectors.toMap(
                item -> item.getString("key"),
                item -> item.get("value"),
                // 重复key时保留先存入的值,需要覆盖新值就返回newVal
                (oldVal, newVal) -> oldVal
        ));
  • Jackson 实现(Spring生态默认内置,无需额外引入第三方JSON库)
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

String jsonArrStr = "// 填入你自己的JSON数组字符串";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode arrNode = objectMapper.readTree(jsonArrStr);
Map<String, Object> resultMap = new HashMap<>();

for (JsonNode itemNode : arrNode) {
    if (itemNode.has("key") && itemNode.has("value")) {
        String mapKey = itemNode.get("key").asText();
        Object mapValue = objectMapper.treeToValue(itemNode.get("value"), Object.class);
        resultMap.put(mapKey, mapValue);
    }
}
  • org.json 原生实现(安卓开发、轻量场景常用)
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

String jsonArrStr = "// 填入你自己的JSON数组字符串";
JSONArray jsonArray = new JSONArray(jsonArrStr);
Map<String, Object> resultMap = new HashMap<>();

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject item = jsonArray.getJSONObject(i);
    if (item.has("key") && item.has("value")) {
        resultMap.put(item.getString("key"), item.get("value"));
    }
}

注意事项

如果需要把value字段对应的对象转成自定义的Java实体类,只需要把代码中获取value位置的Object.class替换成你自己的实体类类型即可,不需要额外写多余的解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:09:24