java如何解析json数据:主流工具对比
java如何解析json数据,项目开发中主流选择为Jackson、Fastjson2、Gson三类工具库,Jackson是Spring框架内置依赖,适合web项目;Fastjson2解析速度较快,需要单独引入依赖;Gson使用简单,适合小工具与测试代码。你可以直接通过Maven引入对应依赖,将json字符串转为Java实体类、Map对象,也能逐层读取json节点,处理数组、嵌套对象。该方案的适用边界是JDK8及以上版本,JDK7及更早版本部分库不再提供维护更新,不建议在生产环境使用。
java解析json数据的依赖引入
你使用Maven管理项目时,直接在pom.xml添加依赖坐标即可。Jackson核心依赖包含jackson-databind,它同时提供序列化与反序列化能力。Fastjson2需要引入fastjson2依赖,注意区分旧版Fastjson,旧版本存在较多安全漏洞,生产环境不推荐使用。Gson引入gson依赖,谷歌官方维护,API设计简洁,版本迭代稳定。
选库看场景。
java解析json数据核心代码示例
Jackson解析,先创建ObjectMapper实例,调用readValue方法,传入json字符串与目标实体类,直接完成解析。如果不想新建实体类,可以读取为JsonNode节点对象,用get方法获取字段,遍历数组节点。Fastjson2使用JSON.parseObject,传入json文本和实体类,快速完成转换。Gson使用Gson对象fromJson方法,参数为json字符串与类型对象。
解析嵌套json时,实体类内部要定义对应的内部对象成员变量,成员变量名称必须和json字段名称保持一致;字段名称不一致时,可以添加注解指定json对应的key,避免字段值解析为空。解析json数组,要把目标类型设置为List集合,配合TypeReference来保存泛型信息,防止泛型擦除导致类型转换异常。
不同json解析工具对比
| 工具 | 上手难度 | 集成场景 | 安全维护状态 |
|---|---|---|---|
| Jackson | 中等 | SpringBoot项目默认自带 | 持续维护,漏洞修复及时 |
| Fastjson2 | 低 | 独立项目,追求解析性能 | 持续维护,旧版Fastjson不推荐 |
| Gson | 低 | 工具类、简单后台程序 | 谷歌长期维护,性能略低 |
java解析json数据常见异常处理
字符串格式错误会抛出解析异常,json缺少逗号、引号不匹配、多余逗号都会触发报错,捕获JsonProcessingException即可捕获这类解析异常。字段类型不匹配,比如json字符串数字赋值给Java字符串类型变量,会抛出类型转换异常。空值解析时,实体类属性默认null,不会自动初始化对象,直接调用属性方法会触发空指针。
解析前做简单校验,判断json字符串非空,可降低异常触发概率。不要直接在异常块内打印堆栈后继续执行业务逻辑,未处理的脏json会造成后续业务逻辑错乱。
生产优先Jackson。
java解析json数据生产环境约束
生产环境禁止使用未维护的Fastjson1版本,该版本大量高危漏洞被公开披露,国家信息安全漏洞共享平台收录多条相关漏洞编号。解析外部传入的json字符串,不能直接解析为任意类型对象,要做好字段白名单控制,避免反序列化漏洞。遇到超大体积json文本,优先流式解析,一次性加载完整字符串会占用大量堆内存,容易引发OOM内存溢出。
实体类尽量添加无参构造函数,多数json解析框架反射实例化对象时依赖无参构造,缺失会直接抛出实例化失败异常。解析后的对象,敏感字段做脱敏处理,不要直接把原始解析对象返回前端。
