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基础之集合框架详解

    Java基础之集合框架详解

    这篇文章主要介绍了Java基础之集合框架详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • idea 如何查找类中的某个方法

    idea 如何查找类中的某个方法

    这篇文章主要介绍了idea 如何查找类中的某个方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 详解Java中CAS机制的原理与优缺点

    详解Java中CAS机制的原理与优缺点

    CAS 英文就是 compare and swap ,也就是比较并交换,这篇文章主要来和大家介绍一下Java中CAS机制的原理与优缺点,感兴趣的小伙伴可以了解一下
    2023-06-06
  • 在netty中使用native传输协议的方法

    在netty中使用native传输协议的方法

    这篇文章主要介绍了在netty中使用native传输协议,这里我们只以Kqueue为例介绍了netty中native传输协议的使用,需要的朋友可以参考下
    2022-05-05
  • spring boot starter actuator(健康监控)配置和使用教程

    spring boot starter actuator(健康监控)配置和使用教程

    这篇文章主要介绍了spring-boot-starter-actuator(健康监控)配置和使用教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • 详解Java Web项目启动执行顺序

    详解Java Web项目启动执行顺序

    这篇文章主要介绍了详解Java Web项目启动执行顺序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 通过实例深入学习Java的Struts框架中的OGNL表达式使用

    通过实例深入学习Java的Struts框架中的OGNL表达式使用

    这篇文章主要通过实例介绍了Java的Strus框架中的OGNL表达式使用,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-11-11
  • Spring Security整合Oauth2实现流程详解

    Spring Security整合Oauth2实现流程详解

    这篇文章主要介绍了Spring Security整合Oauth2实现流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java解析Excel内容的方法

    Java解析Excel内容的方法

    这篇文章主要介绍了Java解析Excel内容的方法,实例分析了java解析excel文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • 用Java实现聊天程序

    用Java实现聊天程序

    这篇文章主要为大家详细介绍了用Java实现聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论