参考资料:

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解析和序列化的更多相关文章

  1. Java下利用Jackson进行JSON解析和序列化

    Java下利用Jackson进行JSON解析和序列化   Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行 ...

  2. Java下利用Jackson进行JSON解析和序列化1

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...

  3. Java下用Jackson进行JSON序列化和反序列化(转)

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...

  4. Spring学习---Spring中利用jackson进行JSON转换

    Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...

  5. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  6. 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化

    Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...

  7. [转载]Java并发编程:volatile关键字解析

    Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 ...

  8. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  9. JSON解析与序列化

    JSON之所以流行,拥有与JavaScript类似的语法并不是全部原因.更重要的一个原因是,可以把JSON数据结构解析为有用的 JavaScript对象.与XML数据结构要解析成DOM文档而且从中提取 ...

随机推荐

  1. jar包和动态链接库

    1 jar包更接近于动态链接库 java在编译的时候,尽管import了其它的jar包,但是它并没有将其它jar包中的源码拷贝到自己的class文件中,它只是使用了jar包中的名字. 而在执行的时候, ...

  2. Keys.BACKSPACE Keys.SPACE

    browser.find_element_by_xpath(xp_newpage).send_keys(Keys.SPACE)browser.find_element_by_xpath(xp_newp ...

  3. android压力测试命令monkey详解【转】

    本文转载自:http://www.jb51.net/article/48557.htm 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-29我要评论 这篇文章主要介绍了android ...

  4. luogu P4719 【模板】动态dp

    noip怎么考这种东西啊...看错题场上爆零凉了 首先我们先进行树链剖分,那么问题可以转换成重链的答案+其他子节点的答案 而每次修改相当于改一段重链的答案,改一次其他子节点的答案交替进行 这样只有一个 ...

  5. rabbitmq最大连接数(Socket Descriptors)

    RabbitMQ自带了显示能够接受的最大连接数,有2种比较直观的方式:1. rabbitmqctl命令. 1 2 3 4 5 6 7 8 9 10 11 12 <span style=" ...

  6. 蓝书2.2 KMP算法

    T1 Radio Transmission bzoj 1355 题目大意: 一个字符串,它是由某个字符串不断自我连接形成的 但是这个字符串是不确定的,现在只想知道它的最短长度是多少 思路: kmp 输 ...

  7. POJ1584 A Round Peg in a Ground Hole 凸包判断 圆和凸包的关系

    POJ1584 题意:给定n条边首尾相连对应的n个点 判断构成的图形是不是凸多边形 然后给一个圆 判断圆是否完全在凸包内(相切也算) 思路:首先运用叉积判断凸多边形 相邻三条边叉积符号相异则必有凹陷 ...

  8. IDEA kafka producer数据输出缓慢 和 kafka consumer 报错的处理

    问题1. IDEA 中Kafa_Producer程序数据输出缓慢 但不报错 问题2. Kafa_Consumer程序报错: 17/11/10 11:31:11 ERROR ReceiverTracke ...

  9. Ubuntu服务器WDCP可视化界面搭建注意

    title: Ubuntu服务器WDCP可视化界面搭建注意 前两天心血来潮,研究了下服务器搭建与部署. 领了个免费体验3天的vps服务器进行了实操. 在安装WDCP的时候遇到了些问题,网上大部分对问题 ...

  10. curl 做爬虫 用服务器代理ip

    有时候会ip会封锁,所以会用一些模拟代理ip进行抓取测试 从网上找了一下代码 function curl_string ($url,$user_agent,$proxy){        $ch = ...