简介

ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类,它可以帮助我们快速的进行各个类型和Json类型的相互转换。

使用

1、引入Jackson的依赖

<!-- 根据自己需要引入相关版本依赖。 -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.10</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.10</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.10</version>
</dependency>

2、ObjectMapper的常用配置


private static final ObjectMapper mapper;public static ObjectMapper getObjectMapper(){return this.mapper;
}static{//创建ObjectMapper对象mapper = new ObjectMapper()//configure方法 配置一些需要的参数// 转换为格式化的json 显示出来的格式美化mapper.enable(SerializationFeature.INDENT_OUTPUT);//序列化的时候序列对象的那些属性  //JsonInclude.Include.NON_DEFAULT 属性为默认值不序列化 //JsonInclude.Include.ALWAYS      所有属性//JsonInclude.Include.NON_EMPTY   属性为 空(“”) 或者为 NULL 都不序列化 //JsonInclude.Include.NON_NULL    属性为NULL 不序列化mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);  //反序列化时,遇到未知属性会不会报错 //true - 遇到没有的属性就报错 false - 没有的属性不会管,不会报错mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//如果是空对象的时候,不抛异常  mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);  // 忽略 transient 修饰的属性mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);//修改序列化后日期格式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);  mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));//处理不同的时区偏移格式mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);mapper.registerModule(new JavaTimeModule());}

3、ObjectMapper的常用方法

a.json字符串转对象

ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Hyl\", \"age\":20}";//将字符串转换为对象
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student);//将对象转换为json字符串
jsonString = mapper.writeValueAsString(student);
System.out.println(jsonString);结果:
Student [ name: Hyl, age: 20 ]{"name" : "Hyl","age" : 20
}

b. 数组和对象之间转换

//对象转为byte数组
byte[] byteArr = mapper.writeValueAsBytes(student);
System.out.println(byteArr);//byte数组转为对象
Student student= mapper.readValue(byteArr, Student.class);
System.out.println(student);结果:
[B@3327bd23Student [ name: Hyl, age: 20 ]

c. 集合和json字符串之间转换


List<Student> studentList= new ArrayList<>();
studentList.add(new Student("hyl1" ,20 , new Date()));
studentList.add(new Student("hyl2" ,21 , new Date()));
studentList.add(new Student("hyl3" ,22 , new Date()));
studentList.add(new Student("hyl4" ,23 , new Date()));String jsonStr = mapper.writeValueAsString(studentList);
System.out.println(jsonStr);List<Student> studentList2 = mapper.readValue(jsonStr, List.class);
System.out.println("字符串转集合:" + studentList2 );结果:
[ {"name" : "hyl1","age" : 20,"sendTime" : 1525164212803
}, {"name" : "hyl2","age" : 21,"sendTime" : 1525164212803
}, {"name" : "hyl3","age" : 22,"sendTime" : 1525164212803
}, {"name" : "hyl4","age" : 23,"sendTime" : 1525164212803
} ]
[{name=hyl1, age=20, sendTime=1525164212803}, {name=hyl2, age=21, sendTime=1525164212803}, {name=hyl3, age=22, sendTime=1525164212803}, {name=hyl4, age=23, sendTime=1525164212803}]

d. map和json字符串之间转换

Map<String, Object> testMap = new HashMap<>();
testMap.put("name", "22");
testMap.put("age", 20);
testMap.put("date", new Date());
testMap.put("student", new Student("hyl", 20, new Date()));String jsonStr = mapper.writeValueAsString(testMap);
System.out.println(jsonStr);
Map<String, Object> testMapDes = mapper.readValue(jsonStr, Map.class);
System.out.println(testMapDes);结果:
{"date" : 1525164212803,"name" : "22","student" : {"name" : "hyl","age" : 20,"sendTime" : 1525164212803,"intList" : null},"age" : 20
}
{date=1525164212803, name=22, student={name=hyl, age=20, sendTime=1525164212803, intList=null}, age=20}

e. 日期转json字符串


// 修改时间格式
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
Student student = new Student ("hyl",21, new Date());
student.setIntList(Arrays.asList(1, 2, 3));String jsonStr = mapper.writeValueAsString(student);
System.out.println(jsonStr);结果:
{"name" : "hyl","age" : 21,"sendTime" : "2020-07-23 13:14:36","intList" : [ 1, 2, 3 ]
}

js中将字符串转换为json对象

var data = "{\"name\":\"Hyl\", \"age\":20}";
var student = eval(data);
console.info(student.name);
console.info(student.age);结果:
Hyl
20

Java ObjectMapper详解相关推荐

  1. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  2. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  3. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  4. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  5. 最详细的java泛型详解

    来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...

  6. Java异常详解及如何处理

    来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...

  7. Java基础——Java NIO详解(一)

    一.基本概念 1.I/0简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过str ...

  8. Java基础——Java NIO详解(二)

    一.简介 在我的上一篇文章Java NIO详解(一)中介绍了关于标准输入输出NIO相关知识, 本篇将重点介绍基于网络编程NIO(异步IO). 二.异步IO 异步 I/O 是一种没有阻塞地读写数据的方法 ...

  9. Java基础——Java IO详解

    一.概述 1.Java IO Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要 ...

最新文章

  1. ubuntu18安装virtualbox
  2. Linux Rootkit 系列四:对于系统调用挂钩方法的补充
  3. 砥砺前行,不忘初心,我的运维学习之路.
  4. 高可用架构-- MySQL主从复制的配置
  5. listview嵌套gridview
  6. 计算机存有多少游戏,8G和16G的计算机内存之间有很大区别吗?玩游戏需要多少内存?...
  7. 第1章 数据分析概述
  8. boost——windows下VS2013update5编译boost库
  9. python面试题及答案2020_2020年python面试题汇总(最新)
  10. ❤️作为测试行业的过来人,宝贵的经验分享给刚入行的你
  11. 图片、照片相似度批量对比
  12. 51单片机波特率计算的公式和方法
  13. 读书笔记之《史记》读后感心得体会
  14. 户外航模试飞地踩点--杭州
  15. python 16进制转中文_求助~ 16进制数据转不了汉字
  16. 用python背单词_还在用背单词App?使用Python开发英语单词自测工具,助你逆袭单词王!...
  17. QQ留言代码,网页QQ留言
  18. 常用aso优化技巧,分享ASO关键词优化的几个小技巧
  19. 汇编(二)——微机原理与接口
  20. [极客大挑战 2020]Roamphp 1、2、4

热门文章

  1. 英语流利说20190118
  2. 流利阅读Day9 Insects in Danger
  3. 如何保存卡住的wps_wps卡住了点不动退不出,文件没保存怎么办_常见问题解析,wps...
  4. dymola学习笔记-第三天——学习软件自带教程DymolaUserManualVolume1,page1-86
  5. arcpy中拆分获取FeatureClass中各类型地物要素到单独的shp中,类似于splitShp的功能(地理国情监测)
  6. 查看github最新的ip地址
  7. 项目背景以及游戏平台简介
  8. 2020 UCB CS61A FALL -- project1 hog
  9. 2019年公务员计算机(大类)类,2019年国家公务员考试证监会参公事业单位计算机类大纲...
  10. 在endnote中制作符合硕士毕业论文的输出格式