【转载】Java下利用Jackson进行JSON解析和序列化
参考资料:
https://blog.csdn.net/sdut406/article/details/85647982
Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。
一、准备工作
Jackson有1.x系列和2.x系列,2.x系列有3个jar包需要下载:
jackson-core-2.2.3.jar(核心jar包)
jackson-annotations-2.2.3.jar(该包提供Json注解支持)
jackson-databind-2.2.3.jar
一个maven依赖就够了
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
aaarticlea/png;base64,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" alt="" />

import java.util.Date; /**
* JSON序列化和反序列化使用的User类
*/
public class User { private String name;
private Integer age;
private Date birthday;
private String email; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
", email='" + email + '\'' +
'}';
}
}

二、JAVA对象转JSON[JSON序列化]

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonDemo {
public static void main(String[] args) throws ParseException, IOException {
User user = new User();
user.setName("zhangsan");
user.setEmail("zhangsan@163.com");
user.setAge(20); SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(dateformat.parse("1996-10-01")); /**
* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
* ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
* writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
* writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
* writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
* writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
*/
ObjectMapper mapper = new ObjectMapper(); //User类转JSON
//输出结果:{"name":"zhangsan","age":20,"birthday":844099200000,"email":"zhangsan@163.com"}
String json = mapper.writeValueAsString(user);
System.out.println(json); //Java集合转JSON
//输出结果:[{"name":"zhangsan","age":20,"birthday":844099200000,"email":"zhangsan@163.com"}]
List<User> users = new ArrayList<User>();
users.add(user);
String jsonlist = mapper.writeValueAsString(users);
System.out.println(jsonlist);
}
}

三、JSON转Java类[JSON反序列化]

public class JacksonDemo {
public static void main(String[] args) throws ParseException, IOException {
String json = "{\"name\":\"zhangsan\",\"age\":20,\"birthday\":844099200000,\"email\":\"zhangsan@163.com\"}";
/**
* ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
*/
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println(user);
}
}

结果
User{name='zhangsan', age=20, birthday=Tue Oct 01 00:00:00 CST 1996, email='zhangsan@163.com'}

public class JacksonDemo { public static ObjectMapper mapper = new ObjectMapper(); public static void main(String[] args) throws ParseException, IOException {
String json = "[{\"name\":\"zhangsan\",\"age\":20,\"birthday\":844099200000,\"email\":\"zhangsan@163.com\"}]";
List<User> beanList = mapper.readValue(json, new TypeReference<List<User>>() {});
System.out.println(beanList);
} }

结果
[User{name='zhangsan', age=20, birthday=Tue Oct 01 00:00:00 CST 1996, email='zhangsan@163.com'}]
四、JSON注解
Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。
@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。
@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Date; /**
* JSON序列化和反序列化使用的User类
*/
public class User { private String name; //不JSON序列化年龄属性
@JsonIgnore
private Integer age; //格式化日期属性
@JsonFormat(pattern = "yyyy年MM月dd日")
private Date birthday; //序列化email属性为mail
@JsonProperty("my_email")
private String email; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
", email='" + email + '\'' +
'}';
}
}


import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat; public class JacksonDemo { public static void main(String[] args) throws ParseException, IOException {
User user = new User();
user.setName("zhangsan");
user.setEmail("zhangsan@163.com");
user.setAge(20); SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(dateformat.parse("1996-10-01")); ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
}
}

{"name":"zhangsan","birthday":"1996年09月30日","my_email":"zhangsan@163.com"}
【转载】Java下利用Jackson进行JSON解析和序列化的更多相关文章
- Java下利用Jackson进行JSON解析和序列化
Java下利用Jackson进行JSON解析和序列化 Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行 ...
- Java下利用Jackson进行JSON解析和序列化1
Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...
- Java下用Jackson进行JSON序列化和反序列化(转)
Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...
- Spring学习---Spring中利用jackson进行JSON转换
Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...
- JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化
Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...
- [转载]Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...
- JSON解析与序列化
JSON之所以流行,拥有与JavaScript类似的语法并不是全部原因.更重要的一个原因是,可以把JSON数据结构解析为有用的 JavaScript对象.与XML数据结构要解析成DOM文档而且从中提取 ...
随机推荐
- AVD那些事儿
启动了AVD却说找不到AVD 错误提示: No active compatible AVD's or devices found. Relaunch this configuration after ...
- YTU 2641: 填空题:静态成员---计算学生个数
2641: 填空题:静态成员---计算学生个数 时间限制: 1 Sec 内存限制: 128 MB 提交: 267 解决: 206 题目描述 学生类声明已经给出,在主程序中根据输入信息输出实际建立的 ...
- luogu 4630 [APIO2018] Duathlon 铁人两项
题目大意: 无向图上找三个点 a b c使存在一条从a到b经过c的路径 求取这三个点的方案数 思路: 建立圆方树 这个圆方树保证没有两个圆点相连或两个方点相连 对于每个节点x 设该节点为路径的中间节点 ...
- bzoj 1370 Gang团伙
题目大意: 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,满足 1. 我朋友的朋友是我的朋友 2. 我敌人的敌人是我的朋友 所有是朋友的人组成一个团伙 告诉你关于这n个人的m条信息,即某两个 ...
- UI Design Do's and Don'ts
转载自-Apple 官网,感觉不错,记录之 (https://developer.apple.com/design/tips/) Some useful design tips about IOS. ...
- poj 2409 Let it Bead【polya定理+burnside引理】
两种置换 旋转:有n种,分别是旋转1个2个--n个,旋转i的循环节数位gcd(i,n) 翻转:分奇偶,对于奇数个,只有一个珠子对一条边的中点,循环节数为n/2+1:对于偶数个,有珠子对珠子和边对边,循 ...
- [Swift通天遁地]一、超级工具-(7)创建一个图文并茂的笔记本程序
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Linux 搭建Discuz论坛
title: Linux 搭建Discuz论坛 Welcome to Fofade's Blog! 这里是Linux 搭建论坛的一些命令记录 命令摘记: 下载文件:Discuz 安装环境:PHP Ap ...
- 一张图带你了解-常见面试之JUC包详解
面试时经常问到JUC包下的类及特性,现在用一张图总结下
- 洛谷 P3372 【模板】线段树 加法
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...