java之json串转Map的整理

发布时间 - 2025-12-25 00:00:00    点击率:
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会自动映射为LinkedHashMapArrayList,取值时需向下转型
  • 推荐指定泛型以提升类型安全:
    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

处理常见坑点

无论用哪个库,以下问题高频出现:

  • 数字类型自动转成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或轻量场景。

基本上就这些,选一个库吃透,比来回切换更高效。


# java  # json  # android  # js  # go  # seo  # 编码  # app  # 中文乱码  # google 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信推文制作网站有哪些,怎么做微信推文,急?  javascript中闭包概念与用法深入理解  深圳网站制作的公司有哪些,dido官方网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  JS中对数组元素进行增删改移的方法总结  Laravel如何使用Vite进行前端资源打包?(配置示例)  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  中山网站推广排名,中山信息港登录入口?  QQ浏览器网页版登录入口 个人中心在线进入  如何解决hover在ie6中的兼容性问题  js实现获取鼠标当前的位置  浅谈redis在项目中的应用  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  专业商城网站制作公司有哪些,pi商城官网是哪个?  浅谈Javascript中的Label语句  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Android使用GridView实现日历的简单功能  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何在建站之星网店版论坛获取技术支持?  网站制作壁纸教程视频,电脑壁纸网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  零服务器AI建站解决方案:快速部署与云端平台低成本实践  北京企业网站设计制作公司,北京铁路集团官方网站?  如何实现建站之星域名转发设置?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  如何快速辨别茅台真假?关键步骤解析  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何快速搭建个人网站并优化SEO?  如何基于云服务器快速搭建网站及云盘系统?  如何在局域网内绑定自建网站域名?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  用yum安装MySQLdb模块的步骤方法  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何登录建站主机?访问步骤全解析  如何快速查询域名建站关键信息?  Laravel如何处理和验证JSON类型的数据库字段  千库网官网入口推荐 千库网设计创意平台入口  想要更高端的建设网站,这些原则一定要坚持!  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  制作公司内部网站有哪些,内网如何建网站?  如何在万网利用已有域名快速建站?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  如何在IIS7中新建站点?详细步骤解析