Java中将JSON字符串转为Map应优先选Jackson,因其生态成熟、Spring Boot原生集成;Fastjson需注意1.x安全漏洞,Gson适用于Android等轻量场景。

Java中将JSON字符串转为Map,核心是选对库、注意类型匹配、处理嵌套结构。最常用的是Jackson和Fastjson,Gson也支持但写法稍不同。
用Jackson转JSON串为Map
Jackson的ObjectMapper默认可将JSON解析为LinkedHashMap(保持字段顺序),适合简单场景。
- 添加Maven依赖:
com.fasterxml.jackson.core:jackson-databind - 基础写法:
ObjectMapper mapper = new ObjectMapper(); Map
map = mapper.readValue(jsonStr, Map.class); - 若JSON含嵌套对象或数组,
Object会自动映射为LinkedHashMap或ArrayList,取值时需向下转型 - 推荐指定泛型以提升类型安全:
Map
map = mapper.readValue(jsonStr, new TypeReference
用Fastjson转JSON串为Map
Fastjson(尤其1.x)对Map转换非常简洁,但要注意版本差异和安全性(2.x已重构,API不兼容)。
- 1.x常用写法:
Map
map = JSON.parseObject(jsonStr, Map.class); - 支持直接解析为
JSONObject(本质是LinkedHashMap子类),便于链式取值:JSONObject obj = JSON.parseObject(jsonStr); String name = obj.getString("name"); - 注意:Fastjson 1.x存在反序列化漏洞,生产环境建议升级到2.x或改用Jackson/Gson
处理常见坑点
无论用哪个库,以下问题高频出现:
立即学习“Java免费学习笔记(深入)”;
-
数字类型自动转成Double:JSON中的
123会被解析为Double而非Integer,比较时用Objects.equals(),或提前转类型 -
空值与null字段:默认不保留null字段;如需保留,Jackson需配置
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)并设为ALWAYS -
中文乱码:确保JSON字符串本身编码为UTF-8,且
ObjectMapper未被错误设置字符集(通常无需手动设) -
日期格式异常:含时间字段时,Jackson默认按ISO格式解析;自定义格式需注册
SimpleModule+StdDateFormat
简单对比与建议
日常开发优先选Jackson:生态成熟、Spring Boot原生集成、文档丰富、安全性高。Fastjson适合老项目快速适配,但新项目不建议引入。Gson语法略啰嗦,但Google维护稳定,适合Android或轻量场景。
基本上就这些,选一个库吃透,比来回切换更高效。











