新用户注册入口 老用户登录入口

[转载]Jackson第一篇【JSON字符串、实体之间的相互转换】

文章作者:转载 更新时间:2023-02-20 18:27:10 阅读数量:273
文章标签:JacksonJSONJavaBean转换JSON转换
本文摘要:本文介绍了Java环境下高效处理JSON的工具库Jackson,通过使用其关键类ObjectMapper与JsonFactory,可实现Java Bean与JSON之间的快速转换。文章详细展示了如何利用writeValue方法将Bean对象序列化为JSON字符串,并借助readValue方法反序列化JSON字符串回Bean对象,其中包括对复杂类型如包含List的实体类TestVo的支持。实际测试表明,Jackson在保持对象相等性的同时,提供了可靠且高效的JSON与Bean相互转换功能。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/gqltt/article/details/7387011。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

来源:http://blog.csdn.net/songyongfeng/article/details/6932655

既然你看到这篇文章相信你已经了解JSON的好处了,那么废话不多说直接进入主题。

Jackson是java中众多json处理工具的一个,比起常见的Json-lib,Gson要快一些。

Jackson的官网:http://jackson.codehaus.org/

里面可以下载Jackson的Jar包 注意jackson依赖:Apache的commons-loggin。

下面聊一下Jackson的常见用法==================================

Bean----->JSON

    public static String beanToJson(Object obj) throws IOException {   // 这里异常都未进行处理,而且流的关闭也不规范。开发中请勿这样写,如果发生异常流关闭不了   ObjectMapper mapper = CommonUtil.getMapperInstance(false);   StringWriter writer = new StringWriter();   JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);   mapper.writeValue(gen, obj);   gen.close();   String json = writer.toString();   writer.close();   return json;   } 

JSON------>Bean

    public static Object  jsonToBean(String json, Class<?> cls) throws Exception {ObjectMapper mapper = CommonUtil.getMapperInstance(false);   Object vo = mapper.readValue(json, cls);   return vo;   }

好了方法写完了咱们测试一下吧 看看他是否支持复杂类型的转换

	public static void main(String[] args) throws Exception {// 准备数据   List<Person> pers = new ArrayList<Person>();   Person p = new Person("张三", 46);   pers.add(p);   p = new Person("李四", 19);   pers.add(p);   p = new Person("王二麻子", 23);   pers.add(p);   TestVo vo = new TestVo("一个容器而已", pers);   // 实体转JSON字符串   String json = CommonUtil.beanToJson(vo);   System.out.println("Bean>>>Json----" + json);   // 字符串转实体   TestVo vo2 = (TestVo)CommonUtil.jsonToBean(json, TestVo.class);   System.out.println("Json>>Bean--与开始的对象是否相等:" + vo2.equals(vo)); }

输出结果

Bean>>>Json----{"voName":"一个容器而已","pers":[{"name":"张三","age":46},{"name":"李四","age":19},{"name":"王二麻子","age":23}]}
Json>>Bean--与开始的对象是否相等:true


从结果可以看出从咱们转换的方法是对的,本文只是对Jackson的一个最简单的使用介绍。接下来的几篇文章咱们深入研究一下这玩意到底有多强大!

相关类源代码:

Person.java

public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {super();this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null) {return false;}if (getClass() != obj.getClass()) {return false;}Person other = (Person) obj;if (age != other.age) {return false;}if (name == null) {if (other.name != null) {return false;} } else if (!name.equals(other.name)) {return false;}return true;} }

TestVo.java

public class TestVo {   private String voName;   private List<Person> pers;   public TestVo() {   }   public TestVo(String voName, List<Person> pers) {   super();   this.voName = voName;   this.pers = pers;   }   public String getVoName() {   return voName;   }   public void setVoName(String voName) {   this.voName = voName;   }   public List<Person> getPers() {   return pers;   }   public void setPers(List<Person> pers) {   this.pers = pers;   }   @Override  public boolean equals(Object obj) {   if (this == obj) {   return true;   }   if (obj == null) {   return false;   }   if (getClass() != obj.getClass()) {   return false;   }   TestVo other = (TestVo) obj;   if (pers == null) {   if (other.pers != null) {   return false;   }   } else if (pers.size() != other.pers.size()) {   return false;   } else {   for (int i = 0; i < pers.size(); i++) {   if (!pers.get(i).equals(other.pers.get(i))) {   return false;   }   }   }   if (voName == null) {   if (other.voName != null) {   return false;   }   } else if (!voName.equals(other.voName)) {   return false;   }   return true;   }   
}  

CommonUtil.java

public class CommonUtil {   private static ObjectMapper mapper;   /**  * 一个破ObjectMapper而已,你为什么不直接new 还搞的那么复杂。接下来的几篇文章我将和你一起研究这个令人蛋疼的问题  *   * @param createNew  *          是否创建一个新的Mapper  * @return  */  public static synchronized ObjectMapper getMapperInstance(boolean createNew) {   if (createNew) {   return new ObjectMapper();   } else if (mapper == null) {   mapper = new ObjectMapper();   }   return mapper;   }   public static String beanToJson(Object obj) throws IOException {   // 这里异常都未进行处理,而且流的关闭也不规范。开发中请勿这样写,如果发生异常流关闭不了   ObjectMapper mapper = CommonUtil.getMapperInstance(false);   StringWriter writer = new StringWriter();   JsonGenerator gen = new JsonFactory().createJsonGenerator(writer);   mapper.writeValue(gen, obj);   gen.close();   String json = writer.toString();   writer.close();   return json;   } public static Object  jsonToBean(String json, Class<?> cls) throws Exception {ObjectMapper mapper = CommonUtil.getMapperInstance(false);   Object vo = mapper.readValue(json, cls);   return vo;   }
}  










本篇文章为转载内容。原文链接:https://blog.csdn.net/gqltt/article/details/7387011。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
ObjectMapper在Java中,ObjectMapper是Jackson库中的一个核心类,它负责将Java对象与JSON数据之间进行序列化和反序列化的操作。在本文的上下文中,ObjectMapper实例被用来将Java Bean对象转换为JSON字符串(序列化),以及将JSON字符串转换回Java对象(反序列化)。通过调用其`writeValue`和`readValue`方法,开发者能够高效地处理JSON数据与Java实体类之间的相互转换。
JsonFactoryJsonFactory是Jackson库中的另一个关键组件,它主要用于创建JsonGenerator和JsonParser等用于处理JSON数据流的实例。在文章的示例代码中,JsonFactory被用来创建JsonGenerator对象,这个对象可以将Java对象写入到输出流中生成JSON格式的数据。JsonFactory在JSON数据的生成过程中起到了工厂类的作用,提供了生成JSON处理器的能力。
JSONJavaScript Object Notation,是一种轻量级的数据交换格式。在本文语境下,JSON作为一种独立于语言、平台的数据交换格式,在Java开发环境中广泛应用,特别是在Web服务接口(如RESTful API)的数据传输、配置文件存储等方面。Jackson库提供的工具使得Java对象能方便快捷地与JSON数据进行互相转换,从而实现前后端数据交互或持久化存储需求。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入理解了Jackson作为Java环境下高效处理JSON工具库的基础用法后,我们可以进一步关注该领域的最新动态和深度应用。近年来,随着微服务架构和RESTful API的广泛应用,JSON数据交换的重要性日益凸显,Jackson的角色也随之变得更加关键。
2023年,Jackson发布了最新的2.14版本,对性能进行了大幅优化,并引入了一些新的特性,如对Java 17中Record类的支持以及对Optional类型更为智能的序列化/反序列化处理。此外,Jackson社区还致力于解决与模块化、安全性和跨平台兼容性相关的各类问题,确保其在各种复杂场景下依然保持高效稳定的表现。
除了基础的Bean与JSON转换外,Jackson在处理嵌套对象、循环引用以及自定义序列化规则等方面提供了强大的功能支持。开发者可以通过注解或自定义Converter等方式实现更为灵活的数据转换逻辑,以满足特定业务需求。
同时,在实际开发过程中,与Jackson类似的其他JSON库如Gson、Fastjson等也持续更新迭代,彼此之间的竞争推动着整个领域技术的发展。例如,近期有评测显示,在特定条件下,Fastjson在处理大数据量时的性能表现已有所提升,而Gson则通过增强对Kotlin语言的支持来吸引更多的开发者。
因此,对于广大Java开发者而言,掌握Jackson不仅限于了解其基本用法,更应关注其在实际项目中的最佳实践、与其他JSON库的对比分析以及如何根据项目特点选择最适合的JSON处理工具,从而提升系统的整体性能和开发效率。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
tail -f /var/log/messages - 实时查看日志文件新增内容。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
HessianRPC在高负载下服务降级与熔断器模式保障用户体验 05-01 jQuery和TweenMax简单实用的水平手风琴特效 01-20 jquery选择国家下拉列表框插件 01-21 Sqoop在Hadoop集群中的数据传输机制及数据库迁移、收集与备份恢复应用实践 12-23 简约渔具批发牧渔企业类网站前端模板下载 11-09 基于bootstrap功能齐全的jQuery进度条插件 10-20 简约大气男性护肤产品HTML5网站模板 09-22 宽屏大气机械设备制造公司网站模板 08-13 演讲会门票销售网站模板下载 07-30 本次刷新还10个文章未展示,点击 更多查看。
经典响应式投资理财企业前端模板 06-26 基于Redis的键值对存储实现用户阅读状态跟踪与管理 06-24 Netty框架中CannotFindServerSelection异常:服务器地址配置错误与通道类型匹配详解 06-18 简洁设计公司响应式网站模板下载 05-06 绿色苗木草坪种植绿化类企业前端CMS模板下载 04-30 怎么在cmd开启mysql服务 04-15 保洁公司家庭保洁服务网站模板 03-26 SpringCloud微服务中分布式锁的死锁问题与状态一致性维护:避免循环依赖、公平锁及超时重试机制在Redisson中的实践运用 03-19 HBase性能测试与RegionServer配置、架构及数据模型调优实践:关注响应时间、并发处理能力与BlockCache优化 03-14 jquery控制radio触发事件 02-15 简约HTML5软件营销业务公司网站模板 02-09
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"