java中常用的json,jsonarray,map数据结构与对象互转详解

 更新时间:2025年12月08日 09:33:17   作者:codingPower  
这篇文章主要为大家详细介绍了java中常用的json,jsonarray,map数据结构与对象互转的相关方法,主要是FastJSON和Jackson两种常用库,有需要的小伙伴可以了解下

前言

创建一个对象

public class SbfpDto{
private int code;
private String message;
}

在Java开发中,对象与JSON、Map等数据结构的互转是常见需求,下面涵盖FastJSONJackson两种常用库的使用方法。

一、JSON字符串转对象

1.FastJSON库的正确用法

// 正确JSON字符串(注意英文引号)
String jsonStr = "{\"code\":2,\"message\":\"需要转换的对象\"}";

// 方法1:直接解析(推荐)
SbfpDto sbfp1 = JSON.parseObject(jsonStr, SbfpDto.class);

// 方法2:通过JSONObject解析
SbfpDto sbfp2 = JSONObject.parseObject(jsonStr, SbfpDto.class);

//将JSON字符串解析为JSONObject对象
JSONObject js=JSONObject.parseObject(jsonStr);

错误修正:示例JSON.parseObject(JSON.toJSONString(jsonStr), SbfpDto .class)中 JSON.toJSONString(jsonStr) 会导致双重转义(如"{\"code\":2}"变成"\"{\\\"code\\\":2}\""),应直接解析原始字符串,即JSON.toJSONString 不应该对String类型进行转换。

2.Jackson库的用法

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;

// 创建ObjectMapper并配置忽略未知字段,设置未知列跳过
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

// 解析JSON
SbfpDto sbfp = mapper.readValue(jsonStr, SbfpDto.class);

关键点

  • FAIL_ON_UNKNOWN_PROPERTIES 配置可避免JSON中有多余字段时抛异常。
  • 必须处理IOException(需try-catch或声明抛出)。

其他:BeanUtil.mapToBean();

二、JSON数组(JsonArray)转对象列表

FastJSON优化版

String jsonStr = "{\"sbfpList\":[{\"code\":2,\"message\":\"对象1\"},{\"code\":3,\"message\":\"对象2\"}]}";

// 一步到位解析(推荐)
List<SbfpDto> sbfps = JSON.parseObject(jsonStr)
                           .getJSONArray("sbfpList")
                           .toJavaList(SbfpDto.class);
//详细步骤   
JSONObject sfbpJson= JSON.parseObject(jsonStr);
JSONArray sbfpArray = sfbpJson.getJSONArray("sbfpList");
List<SbfpDto> sbfps= JSONArray.parseArray(sbfpArray.toJSONString(), SbfpDto.class);    

//2 直接转
String jsonStr2 = "[{\"code\":2,\"message\":\"对象1\"},{\"code\":3,\"message\":\"对象2\"}]";
List<SbfpDto> sbfps=JSONObject.parseArray(jsonstr2,SbfpDto.class);     

List<SbfpDto> sbfps=JSON.parseArray(jsonstr2,SbfpDto.class);                        

优化说明:无需手动转换JSONArray到字符串再解析,直接使用toJavaList()方法更简洁高效。

Jackson版

// 解析整个JSON
JsonNode root = mapper.readTree(jsonStr);
ArrayNode sbfpArray = (ArrayNode) root.get("sbfpList");

// 转换为List
List<SbfpDto> sbfps = mapper.convertValue(sbfpArray, new TypeReference<List<SbfpDto>>() {});

三、对象转Map

1. FastJSON实现

SbfpDto dto = new SbfpDto(2, "需要转换的对象");

// 对象转JSON字符串,再转Map
Map<String, Object> map = JSON.parseObject(JSON.toJSONString(dto), new TypeReference<Map<String, Object>>() {});
//或者
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(jsonStr),Map.class);

//将java对象序列化成JSON字符串
String jsonStr=JSON.toJSONString(dto);

注意:直接使用Map.class可能导致泛型类型丢失,推荐用TypeReference保留类型信息。

2. Jackson实现(更高效)

// 直接转换对象为Map
Map<String, Object> map = mapper.convertValue(dto, new TypeReference<Map<String, Object>>() {});

其他:BeanUtil.beanTomap();

四、最佳实践建议

库的选择

  • FastJSON:API简洁,适合快速开发,但需注意线程安全问题(JSON类部分方法非线程安全)。
  • Jackson:性能优异,社区活跃,推荐用于复杂项目。
  • BeanUtil:hutool中的该类也可以进行map和bean之间的转换。

异常处理

try {
    SbfpDto dto = mapper.readValue(jsonStr, SbfpDto.class);
} catch (IOException e) {
    // 处理解析失败(如日志记录、抛自定义异常等)
}

日期格式等高级配置

// Jackson配置日期格式
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

避免中文引号:确保JSON字符串使用英文双引号 ",而非 “”

通过上述方法,您可以安全高效地实现对象与JSON、Map之间的转换。根据项目需求选择合适的库,并注意配置和异常处理,可显著提升代码健壮性。

到此这篇关于java中常用的json,jsonarray,map数据结构与对象互转详解的文章就介绍到这了,更多相关java常用对象互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中Pulsar InterruptedException 异常

    java中Pulsar InterruptedException 异常

    这篇文章主要为大家介绍了java中Pulsar InterruptedException 异常分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • java跳板执行ssh命令方式

    java跳板执行ssh命令方式

    本文分享了在Java中使用跳板机执行SSH命令的方法,并推荐了一些Maven依赖,希望这些信息对大家有所帮助
    2024-12-12
  • java awt生成签名图片如何消除锯齿化

    java awt生成签名图片如何消除锯齿化

    这篇文章主要介绍了java awt生成签名图片如何消除锯齿化,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 探讨Java语言中那些修饰符

    探讨Java语言中那些修饰符

    在java中常见的修饰符有:abstract(抽象的)、static(静态的)、public(公共的)、protected(受保护的)、private(私有的)、synchronized(同步的)、native(本地的)、transient(暂时的)、volatile(易失的)、final(不可改变的)。对java语言修饰符感兴趣的朋友一起看看吧
    2016-11-11
  • Java使用FilenameFilter查找出目录下指定后缀的文件示例

    Java使用FilenameFilter查找出目录下指定后缀的文件示例

    这篇文章主要介绍了Java使用FilenameFilter查找出目录下指定后缀的文件,结合实例形式分析了java基于FilenameFilter类的文件遍历、查找相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Java中的方法、常量、变量、参数用例详解

    Java中的方法、常量、变量、参数用例详解

    在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:常量与变量,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量,这篇文章主要介绍了Java中的方法、常量、变量、参数,需要的朋友可以参考下
    2024-01-01
  • Maven配置仓库、阿里云镜像、环境变量(史上最全)

    Maven配置仓库、阿里云镜像、环境变量(史上最全)

    本文主要介绍了Maven配置仓库、阿里云镜像、环境变量,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • spring基础概念AOP与动态代理理解

    spring基础概念AOP与动态代理理解

    这篇文章主要为大家详细介绍了spring基础概念AOP与动态代理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java基础总结之Thymeleaf详解

    Java基础总结之Thymeleaf详解

    Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向Java的XML、XHTML、HTML5页面模板,它具有丰富的标签语言、函数和表达式,在使用Spring Boot框架进行页面设计时,一般会选择Thymeleaf模板,需要的朋友可以参考下
    2021-05-05
  • java桌球小游戏 小球任意角度碰撞

    java桌球小游戏 小球任意角度碰撞

    这篇文章主要为大家详细介绍了java桌球小游戏,小球任意角度碰撞,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论