Jackson是SpringBoot默认使用的JSON处理库,它可以轻松的将Java对象转换成JSON对象,同样也可以将JSON转换成Java对象。本文介绍下Jackson的基本使用方法,包括序列化和反序列化;文中所使用到的软件版本:Java 1.8.0_191、Jackson 2.10.0。

1、引入依赖

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.0</version>
</dependency>

如果使用的是SpringBoot,默认就使用了Jackson,则无需引入。

2、序列化

    public static String serialize() {
MyBean bean = new MyBean();
bean.setS("测试字符串");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -1);
bean.setD(calendar.getTime()); List<MyBean> list = new ArrayList<MyBean>();
list.add(bean);
Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
map.put("data", list);
String result = "";
try {
ObjectMapper objectMapper = new ObjectMapper();
//设置日期格式,也可在类属性上使用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")来设置
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
objectMapper.setSerializationInclusion(Include.ALWAYS);
//字符串如果为null则输出""
objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(new BeanSerializerModifier() {
@Override
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
for (BeanPropertyWriter writer : beanProperties) {
Class<?> clazz = writer.getType().getRawClass();
if (CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz)) {
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
});
}
}
return beanProperties;
}
})); result = objectMapper.writeValueAsString(map);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} return result;
}

3、反序列化

    public static void deserialize() {
String s = serialize();
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
TypeReference<Map<String, List<MyBean>>> type = new TypeReference<Map<String, List<MyBean>>>(){};
Map<String, List<MyBean>> map = objectMapper.readValue(s, type);
System.out.println(map); //树模型api
JsonNode root = objectMapper.readTree(s);
JsonNode bean = root.get("data").get(0);
System.out.println(bean.get("s").asText());
//...
} catch (Exception e) {
e.printStackTrace();
}
}

4、完整例子

package com.inspur.demo.json;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; /**
* Jackson操作JSON数据
*/
public class JacksonCase {
/**
* 序列化
*/
public static String serialize() {
MyBean bean = new MyBean();
bean.setS("测试字符串");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -1);
bean.setD(calendar.getTime()); List<MyBean> list = new ArrayList<MyBean>();
list.add(bean);
Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
map.put("data", list);
String result = "";
try {
ObjectMapper objectMapper = new ObjectMapper();
//设置日期格式,也可在类属性上使用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")来设置
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
objectMapper.setSerializationInclusion(Include.ALWAYS);
//字符串如果为null则输出""
objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(new BeanSerializerModifier() {
@Override
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
for (BeanPropertyWriter writer : beanProperties) {
Class<?> clazz = writer.getType().getRawClass();
if (CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz)) {
writer.assignNullSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
});
}
}
return beanProperties;
}
})); result = objectMapper.writeValueAsString(map);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} return result;
} /**
* 反序列化
*/
public static void deserialize() {
String s = serialize();
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
TypeReference<Map<String, List<MyBean>>> type = new TypeReference<Map<String, List<MyBean>>>(){};
Map<String, List<MyBean>> map = objectMapper.readValue(s, type);
System.out.println(map); //树模型api
JsonNode root = objectMapper.readTree(s);
JsonNode bean = root.get("data").get(0);
System.out.println(bean.get("s").asText());
//...
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
serialize();
deserialize();
} }

JacksonCase

package com.inspur.demo.json;

import java.util.Arrays;
import java.util.Date; public class MyBean {
private String s = "字符串";
private String s2;
private String s3 = "字符串3";
private int i = 123;
private Integer i2;
private char c = '到';
private char[] c2 = new char[]{'a', 'b'};
private Date d = new Date();
private Date[] d2 = new Date[]{new Date(), new Date()};
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
public String getS3() {
return s3;
}
public void setS3(String s3) {
this.s3 = s3;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Integer getI2() {
return i2;
}
public void setI2(Integer i2) {
this.i2 = i2;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public char[] getC2() {
return c2;
}
public void setC2(char[] c2) {
this.c2 = c2;
}
public Date getD() {
return d;
}
public void setD(Date d) {
this.d = d;
}
public Date[] getD2() {
return d2;
}
public void setD2(Date[] d2) {
this.d2 = d2;
}
@Override
public String toString() {
return "MyBean [s=" + s + ", s2=" + s2 + ", s3=" + s3 + ", i=" + i + ", i2=" + i2 + ", c=" + c + ", c2="
+ Arrays.toString(c2) + ", d=" + d + ", d2=" + Arrays.toString(d2) + "]";
}
}

MyBean

Java操作JSON数据(4,end)--Jackson操作JSON数据的更多相关文章

  1. 3. 懂了这些,方敢在简历上说会用Jackson写JSON

    你必须非常努力,才能看起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  2. Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

    日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...

  3. Java基础知识强化之IO流笔记57:数据输入输出流(操作基本数据类型)

    1. 数据输入输出流(操作基本数据类型) (1)数据输入流:DataInputStream DataInputStream(InputStream in) (2)数据输出流:DataOutputStr ...

  4. 在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

    在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

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

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

  6. Java 常见数据交换格式——xml、json、yaml

    目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...

  7. 使用jackson解析JSON数据

    本文介绍使用jackson来对json数据进行解析操作 首先,需要去官网下载jackson,本文使用的是(jackson-all-1.9.11.jar) 主要通过ObjectMapper对json进行 ...

  8. 【转载】Java下利用Jackson进行JSON解析和序列化

    参考资料: https://blog.csdn.net/sdut406/article/details/85647982 Java下常见的Json类库有Gson.JSON-lib和Jackson等,J ...

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

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

随机推荐

  1. 1-剑指offer: 数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  2. MarkDown中如何加入上标和下标

    上标 使用<sup></sup>标签包裹的部分就是上标,例如:A<sup>T</sup> 显示效果就是 AT . 下标 使用<sub>< ...

  3. python中列表(list)函数及使用

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  4. woocommerce隐藏breadcrumb面包屑导航

    woocommerce已经集成比较完善的组件,当然也包含breadcrumb面包屑导航,但是我们如果调整一下breadcrumb的位置要如何操作呢?首先要先把woocommerce隐藏breadcru ...

  5. jieba模块

    jieba模块 下载 pip install jieba 使用 import jieba 精确模式 jieba.cut() 直接打印出的是单个文字 转换成列表-->jieba.lcut() im ...

  6. Jenkins集成allure测试报告

    前言 Allure框架是一个功能强大的自动化测试报告工具,不仅支持多种编程语言,而且能够完美的与各种集成工具结合,包括Jenkins,TeamCity,Bamboo,Maven等等,因此受到了很多测试 ...

  7. MySQL 学习网站

    [大型网站] CSDN论坛MySQL版块 https://bbs.csdn.net/forums/MySQL MySlide搜索MySQL https://myslide.cn/slides/1758 ...

  8. pptpd pptpctrl[25553]: segfault at 0 ip 00007fb6fe23ebdc sp 00007ffdef6334e8 error 4 in libc-2.17.so[7fb6fe0dd000+1c2000] pptp拨号连接失败

      以下是一次记录pptpd vpn无法连接后的心酸历程: pptp client拨号发现一直无响应,查看日志   因为pptpd服务端是一台高质量公网地址,所以平时拨入vpn连接都非常快,今天发起拨 ...

  9. 【Linux】查看端口和进程

    netstat -tunlp ps -ef|grep process_name

  10. 关于三层架构和MVC模式的思考

    MVC模式 核心: 1.解耦Model和View,即使得Model可以被不同的展示,比如一批统计数据可以分别用柱状图.饼图表示 2.Controller用来保证Model和View的同步 Model ...