Jackson快速入门

引言

上一篇博客《XML模板解析————Dom4j解析xml案例分析》简单讲解了关于xml模板的解析,使用到了dom4j,这篇文章其实算是个姊妹篇,都是对于目前工作中的一些任务,如xml、json相互解析所涉及到的知识。

但是相对于xml而言,我更希望通过这篇博客能够稍微全面的学习一下jackson。因为之前用过的相关类库是国产的fastjson,虽然简单的操作还可以,但是最近发现远比jackson的功能还是差远了。虽然fastjson在性能方面上较为优秀,但是jackson本身非常稳定,并且功能相当齐全,历史也较为久远,而且jackson也是Spring Boot对于json解析的默认推荐。如果你的项目是Spring Boot,不需要引入任何的额外配置即可完成对json的处理操作,真是又强大,又好用。

一、ObjectMapper类

ObjectMapper类是Jackson库的主要类。它提供了一些功能将Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。

ObjectMapper是可以反复使用的对象。

二、JSON字符串转POJO对象

    @Testpublic void jsonStrToJavaBean() throws JsonParseException, JsonMappingException, IOException {String stuJsonStr = "{\"name\" : \"Tom\", \"age\" : 25}";ObjectMapper mapper = new ObjectMapper();Student stu = mapper.readValue(stuJsonStr, Student.class);System.out.println(stu);String stuStr = mapper.writeValueAsString(stu);System.out.println(stuStr);}

执行结果:

com.group.coursesystem.util.JsonTest$Student@167fdd33
{"name":"Tom","age":25}

三、对象序列化

对象序列化指的是将POJO对象保存到文件中,文件以".json"结尾,并且要能够从json文件中读出对象。

将对象序列化到json文件中:

    @Testpublic void convertBeanAndJsonFile() throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();Student stu = new Student("Milly", 23);mapper.writeValue(new File(stu.getName() + ".json"), stu);}

执行结果:

将json文件读出到Bean中:

    @Testpublic void jsonFileToBean() throws JsonParseException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();Student stu = mapper.readValue(new File("Milly.json"), Student.class);System.out.println(stu);}

执行结果:

[name = Milly, age = 23]

四、数据绑定

Jackson数据绑定分为简单数据绑定完全数据绑定。

4.1 简单数据绑定

简单数据绑定是指JSON映射到Java核心数据类型,如String 、Map、List等。

JSON类型Java类型
objectLinkedHashMap<String,Object>
arrayArrayList<Object>
stringString
complete numberInteger, Long or BigInteger
fractional numberDouble / BigDecimal
true | falseBoolean
nullnull

示例代码:

    @Testpublic void simpleDataBind() throws JsonGenerationException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();boolean isStudent = true;int[] nums = {1, 3, 5, 7, 9};Student Jerry = new Student("Jerry", 26);Map<String, Student> stuMap = new HashMap<>();stuMap.put("studentObj", Jerry);Map<String, Object> dataMap = new HashMap<>();dataMap.put("studentName", Jerry.getName());dataMap.put("studentAge", Jerry.getAge());dataMap.put("Jerry", Jerry);dataMap.put("stuMap", stuMap);dataMap.put("nums", nums);dataMap.put("isStudent", isStudent);// -----------------序列化为json文件------------------mapper.writeValue(new File("dataMap.json"), dataMap);// -------------------从json文件中读出各个对象----------------Map<String, Object> readDataMap = mapper.readValue(new File("dataMap.json"), Map.class);System.out.println(readDataMap);System.out.println(readDataMap.get("Jerry"));System.out.println(readDataMap.get("stuMap"));System.out.println(readDataMap.get("nums"));System.out.println(readDataMap.get("isStudent"));}

执行结果:

dataMap.json文件内容(原始形式为排列成一行,下图为原数据手动格式化后的结果):

控制台输出:

4.2 完全数据绑定

完全数据绑定指JSON映射到任何Java对象。

参考二、三节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章读懂MySQL的各种联合查询

一篇文章读懂MySQL的各种联合查询 联合查询是指将两个或两个以上的表的数据根据一定的条件合并在一起! 联合查询主要有以下几种方式&#xff1a; 全连接&#xff1a;将一张表的数据与另外一张表的数据彼此交叉联合查询出来 举例如下&#xff1a; 先建两张表&#xff1a; CR…

Class.forName()、Class.class、getClass() 区别

问&#xff1a;简单谈谈你对 Java 中 Class.forName()、Class.class、getClass() 三者的理解&#xff1f; Class.class 的形式会使 JVM 将使用类装载器将类装入内存&#xff08;前提是类还没有装入内存&#xff09;&#xff0c;不做类的初始化工作&#xff0c;返回 Class 对象…

教你如何一篇博客读懂设计模式之—--原型模式

教你如何一篇博客读懂设计模式之----原型模式 what&#xff1a;是什么 原型模式&#xff1a; 用于创建重复的对象&#xff0c;既不用一个属性一个属性去set和get&#xff0c;又不影响性能&#xff0c;原型模式产生的对象和原有的对象不是同一个实例&#xff0c;他们的地址也…

Java反射————Method根据方法名称字符串调用方法

引言 之前浏览廖雪峰老师的个人博客网站&#xff0c;无意间发现了关于在Java8中获取参数的方法&#xff0c;随手一转《Java 8中获取参数名称》&#xff0c;没想到今天遇到一个功能&#xff0c;非常符合这种反射调用的使用场景。回看了这篇之前转载的文章&#xff0c;然后根据自…

一篇文章看懂@Scheduled定时器/@Async/CompletableFuture

一篇文章看懂Scheduled定时器/Async/CompletableFuture Scheduled注解解析&#xff1a; 1.cron&#xff1a;最重要的一个参数 cron表达式[秒] [分] [小时] [日] [月] [周] [年]&#xff08;[年]可省略&#xff09; 简单了解一下&#xff0c;网上有现成的工具 示例&#xff…

一篇搞懂HTTP协议

本文转自 &#xff1a;flyhero 码上实战《一个HTTP打趴80%面试者》 HTTP协议简介 HTTP&#xff08;超文本传输协议&#xff09;是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成&#xff0c;且是无状态的。&#xff08;暂不介绍HTTP2&#xff09; 协议&…

注册gmail邮件,遇到“此电话号码无法用于进行验证”该怎么办

注册gmail邮件&#xff0c;遇到“此电话号码无法用于进行验证”该怎么办&#xff1f; 跟浏览器语言的设置有关&#xff0c;将语言改为英文即可&#xff0c;亲测有效&#xff01;

Jackson高级操作————节点树

引言 继《Jackson快速入门》基础篇之后的树模型相关操作。 节点树模型 ObjectMapper构建JsonNode节点树&#xff0c;类似于DOM解析器的XML。 Testpublic void testJsonTree() throws JsonProcessingException, IOException {String jsonString "{\"name\":\…

spring源码分析第一天------源码分析知识储备

spring源码分析第一天------源码分析知识储备 Spring源码分析怎么学? 1、环境准备&#xff1b; 2、思路 看&#xff1a;是什么&#xff1f; 能干啥 想&#xff1a;为什么&#xff1f; 实践&#xff1a;怎么做&#xff1f; 调试的时候&#xff0c;完全可以在…

Jackson高级操作————流式API与JsonGenerator、JsonParser

引言 继《Jackson快速入门》之后的高级相关操作。 Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API&#xff0c;这种方式开销小&#xff0c;性能高&#xff0c;因此&#xff0c;如果应用程序或者程序逻辑对于性能有一定要求&#xff0c;可以使用这种…

Mysql高级教程思维导图

Mysql高级教程思维导图 1、思维导图总览&#xff1a; 2、MySQL架构介绍&#xff1a; 2.1、MySQL简介 2.2、MySQL Linux版安装 2.3、MySQL配置文件 2.4、MySQL逻辑架构介绍 2.5、MySQL存储引擎 2.6、MySQL的用户和权限管理 2.7、MySQL一些杂项配置 ’ 3、索引优化分析 3.1、性…

Eclipse(STS 4)闪退导致EGit插件异常

引言 到目前为止&#xff0c;STS已经闪退过三次了。 问题很棘手&#xff0c;我需要冷静。 首先出现了一个问题就是&#xff0c;EGit无法commit。 第二个问题是切换分支报错。 闪退重启后EGit无法提交代码 观察闪退出现的时机&#xff0c;一般出现在我 commit 代码的时候&…

spring源码分析第二天------spring系统概述以及IOC实现原理

1、Spring5 概述 Spring 是一个开源的轻量级 Java SE&#xff08;Java 标准版本&#xff09;/Java EE&#xff08;Java 企业版本&#xff09;开发应用框架&#xff0c; 其目的是用于简化企业级应用程序开发。 Spring 框架除了帮我们管理对象及其依赖关系&#xff0c;还提供像通…

Linux进阶之路————Linux概述

引言 Linux是一个开源、免费的操作系统。学习Linux知识分为以下几个阶段&#xff1a; 第一阶段&#xff1a;Linux环境下的基本操作命令&#xff0c;包括文件操作命令&#xff08;rm、mkdir、chmod、chown&#xff09;编辑工具使用&#xff08;vi、vim&#xff09;Linux用户管…

spring源码分析第三天------spring核心IOC容器和依赖注入原理

基于XML的依赖注入 1、依赖注入发生的时间 当 Spring IOC 容器完成了 Bean 定义资源的定位、载入和解析注册以后&#xff0c;IOC 容器中已经管理类 Bean 定义的相关数据&#xff0c;但是此时 IOC 容器还没有对所管理的 Bean 进行依赖注入&#xff0c;依赖注入在以下两种情况 …

Linux进阶之路————远程登录与vim编辑器

远程登录 远程的Linux系统中&#xff0c;如果希望通过ssh协议登录&#xff0c;那么在Linux需要有一个sshd服务监听22端口&#xff0c;也就是说要想通过ssh登录远程linux&#xff0c;那么linux必须安装sshd服务&#xff0c;并开启。这是一个远程登录成功的前提。 vi、vim编辑器…

JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

JavaWeb中监听器Listener过滤器filter拦截器interceptor区别 如果从整个项目中看&#xff0c;一个servlet请求的执行过程就变成了这样context-param–>listener–>filter–>servlet–>interceptor(指的是拦截器) 1.概念 context-param&#xff1a;就是一些需要初…

Linux进阶之路————开机、重启和用户登录注销

关机、重启命令 shutdown 命令&#xff1a; 1&#xff09;shutdown -h now 立即关机 2&#xff09;shutdown -h 1 1分钟之后关机 3&#xff09;shutdown -r now 立即重启 reboot 命令&#xff0c;直接使用&#xff0c;表示立即重启 halt 命令&am…

spring源码分析第四天------springmvc核心原理及源码分析

spring源码分析第四天------springmvc核心原理及源码分析 1、基础知识普及 2、 SpringMVC请求流程 3、SpringMVC代码流程 4、springMVC源码分析 4.1 4.2 4.3 5、Spring MVC 的优化 补充&#xff1a; SpringMVC经典设计是handlerMapping&#xff0c;大家可以看一…

Linux进阶之路————用户管理

引言 前面几篇关于Linux的已经大概领略了Linux的风采&#xff0c;本篇用户管理&#xff0c;将着重总结日常工作中&#xff0c;非常重要的用户管理功能。 主要包括&#xff1a;新增用户、删除用户、查询用户信息、指定/修改密码、切换用户、用户组&#xff0c;以及与用户管理相…