如何将含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
相关产品推荐
相关产品推荐

