参考资料:

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,iVBORw0KGgoAAAANSUhEUgAAAWcAAABBCAIAAACCWPJFAAAHCUlEQVR4nO2csZLbNhCG/VwcW7m8wimKZlK5yGRyI026NFdIqlO4ES+Vyoiu0qgLUOYF3KfKpEneIgVFcAEsQECiSJD4PV8h60hxd7n6uYDP/7v3X30NAADhvBs9AgDAtIBqAADigGoAAOIIVY1/fv1U8+Xj8+hBAwBGZAKqUSzWu0pIKY+bp9Hr1YS0PYryZdHGU6wOZ1HtVqER1kmlk1FQzMnnWGxKUR2Wixuv6Ao4KvE7Y5gEvGqcTqfT6fT6+qpejKgay30lyu3olaJANdLMMVnVKFaHsxBSSvbh91JefySlZM5dbI9CSCmF3nIjEqoa//3+ueavn78fOMSXUpz36/DjB2hWWzXiP2F6qpF+jn7V6Iynl4DtGIrF9ti8U6wOZ6tzPB1eLNa76nr8SykSeXzeMmt8+vPvmu9+OQ8QIlRjokA1HJcwx5bADk9n7cOrxuVyuVwub29v6gVVjc9f/q356bc/rKJcpykpZV0I+o4asYrF9iiq3eY6th03T8WmpGfRgtJz2Ulvua/UMT9+2LSXqw7LxRMXUt0c26MQojr8sK9UYLWcd4bnWKE02XFBGmHQBq2Prx8jNBdSK0cB93zRYm6EVgq+XM18nlqO9kXphG9EqF2iztRKgVZDe79J3BUSGwO7rmGfN0aTu76rsY/PoVXjtlmjrh1NzHin2JSirX7TpptSSln3k39+KxbrXdn0hPoo6xStWevbvKI98VS/oHeovoTS8s7wPKrBB8lUpglmUwoVIZOLt4BtVFp3xtwIrRR8uSzVSCFHeq6SrZdSaR8bIW0M5wFtNaweY0NyxsDF7P/mL/eVZ08kncm0V9WwV3T6O+R7S7uTf+0qtPGkut5IcpbWHM2MoP4Yz0DafKIrJPXaP2swQTJr3fWuEseypOLF5BJUQHPojbkRWinYciWVI9karHYr86LGX61WMe+7/wBdN8msYYTkjcHoZP/GBNv/2ukpr1D8u6H3qYa699GqUYsueU17sX5K1B+uqQa3Kf1A1WCDdH2jRFVxQyzJJaiAt6mGWSt/x6eWI5+XmhbZCK0Vk+cA2ie9qEbIXqZfNfw/HZL+VyhqabDbr5nhs10CeL+WZLprVYPcj2WzGVGsDjttUWoMosb0yD9z6kuo+TBcNZjpnQ2SqQztyLaVrVxCCti0Lzczd90I43vClSulHLkvEll0VO26kouQf5wYB6jvNu0xn2q4Ymhvx3pXmQsT7WY1V7RXN8XqcKbxpDxr3L4b2qzBgja6YlWj+XUvKeW5LNWs0W4mkfoGbHpxi+GK7IbephqOII3K2NJWv2/nElBAUzViboQ1dtnlSilHu1fVqkqIarfX1NCOUDXG84dv7QPUksqMxKsazhhU3fR1n7A6vD1d28q9/tTePB6dPmeNnGH3cWdGDjmCEKAa/ZDO9IgcwaPhVQOEc/2n2Vk/hHPIEYQD1QAAxAHVAADEAdUAAMQB1QAAxAHVAADEAdUAAMQB1QAAxDGEasCpGIA5MXPVgFNxIuSQ4wBlSYT+VQNOxX6gGnPNcYCyBH/m/c7GvqiGUA04FVs3Bp6js81xGHdS94ff6WxMXCncXTr0rAGnYqjGvHMcVzWsC0VYEGq+sN4g+1cNOBXDqVhOxamY8V5hTgwxGabWRFoLeU2Pn7+hX9SIREzvwj6cjYtNSZfzHn1JZdaAU3EiLr45ORU7I2H9hNk3XWXp9DTm3M9DE2Hq0IezsbEJOAXVgFMxnIqHdSp2twR7YpddqKMs3CU41YhPxL9heYOzcVqzBpyK6Ws4FY+eIwnJNhy+RzWsFgoyPXapRkcitA5Garc5G9MYht7XgFMxnIrfT8Kp2BlJmGoElKXb9NizQvHeLLMOvTgbdz0yH6gacCqGU7GcglMxG0m4argu/b7L01g7IHA31Lq0UYe+nI3tWz+QaiT1L6+TIAcX3xxyzAeoxvjk4OKbQ4750L9qgHBycPHNIcfcgGoAAOKAagAA4oBqAADigGoAAOKAagAA4oBqAADigGoAAOIYQjXgNgzAnJi5asBtOBFyyDEfhv6N8oHTg9twIuSQo57s/X6/6f427RCqAbdh/RLwDZ1zjsW9fr+aoeTo6bDM/H+vQTUmyjxyjPX71c71OlyMS0r+GnAbdgy3AzvxBt+I6bsNPyBT6/Mj/H6Nw6IeeEOSyqwBt+FEnHhzcht+SKZs+7Gw7gFKUlOes5JRDbgNw214WLfhB2VKey/W79c8PZ8VCtyG4TZsk1SOD81UNd4Nfr/hPx2XZGYNuA3DbXhgt+EHZXqP3+/qcCb+tRnNGnAbhtuwnILb8KMyvc/v197uTZBUZo2cycGJN4cc8wGqMT4pz6LIEdj0rxognByceHPIMTegGgCAOKAaAIA4oBoAgDigGgCAOKAaAIA4/gcku/JB9RULLgAAAABJRU5ErkJggg==" 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. linux文件系统的权限简单介绍

    linux系统下,文件的权限是这样表示的: - --- --- --- 一共用10位的二进制进行表示,其中 位置 0 :  - :文件        d :目录剩下的9个位置:位置1-3 当前用户(应 ...

  2. jdk、jre、spring、java ee、java se

    1 java se.java ee和java me 这三个是java的标准.java se是根本,java ee建立在java se上,用于server.java me是java se的子集,用于终端 ...

  3. 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!

    基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...

  4. Django的CBV方式讲解

    CBV使用配置 路径url的配置 cbv 顾名知义就是通过类的方法来调用,我们在url中配置为如下路径 url(r'^cbv.html/', views.Cbv.as_view()), 这里的Cbv是 ...

  5. 【145】◀▶ .NET Framework类库索引

    C#编程基础: A1 ………… 基础A2 ………… using 关键字A3 ………… as 关键字A4 ………… is 关键字A5 ………… switch 关键字A6 ………… return 语句关键 ...

  6. sql的where条件中包含中文,查询不出来的处理方法

    SELECT  * FROM phonenumber_info where PROVANCE=N'广东' and  CITY=N'中山市'

  7. MySQL - MyCat 实现读写分离

    前言 MyCat是一个彻底开源的,面向企业应用开发的大数据库集群,支持事务.ACID.可以替代MySQL的加强版数据库.其功能有可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群.融 ...

  8. MySQL5.7 windows二进制安装

    200 ? "200px" : this.width)!important;} --> 介绍 1.下载解压 下载地址:http://dev.mysql.com/get/Dow ...

  9. vue中子组件向父组件传值

    1.子组件$emit()触发,父组件$on()监听 子组件:<template> <div class="hello"> <button v-on:c ...

  10. bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】

    参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...