【转载】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文档而且从中提取 ...
随机推荐
- vue iview Select bug,在低版本浏览器中报错
iview是个好东西,今天第一次试用,用来做了一个app,但是在安卓5.1各种报错啊,头痛的是不知道具体哪行代码错了,总是报错undefined is not a function. 倒腾了半天,原来 ...
- SuperSocket中的Server是如何初Initialize的
第一个函数 d:\sourcecode\github\supersocket\quickstart\basic\telnetserver_startbyconfig\program.cs static ...
- hdoj--2186--悼念512汶川大地震遇难同胞——一定要记住我爱你(模拟水题)
悼念512汶川大地震遇难同胞--一定要记住我爱你 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- Web安全总结摘录
借助刚才看到的文章,回顾一下常见的Web安全问题:XSS.CSRF.SQL注入漏洞. 一.XSS XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading ...
- LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
题目:https://loj.ac/problem/6089 对于 i <= √n ,设 f[i][j] 表示前 i 种,体积为 j 的方案数,那么 f[i][j] = ∑(1 <= k ...
- POJ2187 Beauty Contest (旋转卡壳算法 求直径)
POJ2187 旋转卡壳算法如图 证明:对于直径AB 必然有某一时刻 A和B同时被卡住 所以旋转卡壳卡住的点集中必然存在直径 而卡壳过程显然是O(n)的 故可在O(n)时间内求出直径 凸包具有良好的性 ...
- 5. extjs 中buttonAlign什么意思
转自:https://zhidao.baidu.com/question/1174901985976576339.html指定Panel中按钮的位置.可配置的值有'right', 'left' 和 ' ...
- 正则表达式:(?=a)是什么意思?
1.(?=a) 表示我们需要匹配某样东西的前面. 2.(?!a) 表示我们需要不匹配某样东西. 3.(?:a) 表示我们需要匹配某样东西本身. 4.(?<=a) 表示我们需要匹配某样东西的后面. ...
- Java多线程系列一——Java实现线程方法
Java实现线程的两种方法 继承Thread类 实现Runnable接口 它们之间的区别如下: 1)Java的类为单继承,但可以实现多个接口,因此Runnable可能在某些场景比Thread更适用2) ...
- ubuntu 12.04不能mount nfs目录与挂载后只读不能写问题 (转载)
转自:http://blog.chinaunix.net/uid-20680966-id-3810455.html 服务器用的是fedora 12 以前在helper2416开发板上挂载服务器上的n ...