当前位置: 代码网 > it编程>编程语言>Java > java中常用的json,jsonarray,map数据结构与对象互转详解

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

2025年12月08日 Java 我要评论
前言创建一个对象public class sbfpdto{private int code;private string message;}在java开发中,对象与json、map等数据结构的互转是常

前言

创建一个对象

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常用对象互转内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com