首页 > 其他分享 >ObjectMapper使用详细介绍

ObjectMapper使用详细介绍

时间:2024-01-16 19:56:17浏览次数:34  
标签:mapper 20 name age 介绍 详细 new ObjectMapper

ObjectMapper使用详细介绍

目录

简介

1、ObjectMapper的常用配置

2、ObjectMapper的常用方法

1)json字符串转对象

2)数组和对象之间转换

3)集合和json字符串之间转换

4)map和json字符串之间转换

5)日期转json字符串

6)readTree()方法


简介

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

1、ObjectMapper的常用配置

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

2、ObjectMapper的常用方法

1)json字符串转对象

  1. ObjectMapper mapper = new ObjectMapper();
  2. String jsonString = "{\"name\":\"Hyl\", \"age\":20}";
  3. //将字符串转换为对象
  4. Student student = mapper.readValue(jsonString, Student.class);
  5. System.out.println(student);
  6. //将对象转换为json字符串
  7. jsonString = mapper.writeValueAsString(student);
  8. System.out.println(jsonString);
  9. 结果:
  10. Student [ name: Hyl, age: 20 ]
  11. {
  12. "name" : "Hyl",
  13. "age" : 20
  14. }

2)数组和对象之间转换

  1. //对象转为byte数组
  2. byte[] byteArr = mapper.writeValueAsBytes(student);
  3. System.out.println(byteArr);
  4. //byte数组转为对象
  5. Student student= mapper.readValue(byteArr, Student.class);
  6. System.out.println(student);
  7. 结果:
  8. [B@3327bd23
  9. Student [ name: Hyl, age: 20 ]

3)集合和json字符串之间转换

  1. List<Student> studentList= new ArrayList<>();
  2. studentList.add(new Student("hyl1" ,20 , new Date()));
  3. studentList.add(new Student("hyl2" ,21 , new Date()));
  4. studentList.add(new Student("hyl3" ,22 , new Date()));
  5. studentList.add(new Student("hyl4" ,23 , new Date()));
  6. String jsonStr = mapper.writeValueAsString(studentList);
  7. System.out.println(jsonStr);
  8. List<Student> studentList2 = mapper.readValue(jsonStr, List.class);
  9. System.out.println("字符串转集合:" + studentList2 );
  10. 结果:
  11. [ {
  12. "name" : "hyl1",
  13. "age" : 20,
  14. "sendTime" : 1525164212803
  15. }, {
  16. "name" : "hyl2",
  17. "age" : 21,
  18. "sendTime" : 1525164212803
  19. }, {
  20. "name" : "hyl3",
  21. "age" : 22,
  22. "sendTime" : 1525164212803
  23. }, {
  24. "name" : "hyl4",
  25. "age" : 23,
  26. "sendTime" : 1525164212803
  27. } ]
  28. [{name=hyl1, age=20, sendTime=1525164212803}, {name=hyl2, age=21, sendTime=1525164212803}, {name=hyl3, age=22, sendTime=1525164212803}, {name=hyl4, age=23, sendTime=1525164212803}]

4)map和json字符串之间转换

  1. Map<String, Object> testMap = new HashMap<>();
  2. testMap.put("name", "22");
  3. testMap.put("age", 20);
  4. testMap.put("date", new Date());
  5. testMap.put("student", new Student("hyl", 20, new Date()));
  6. String jsonStr = mapper.writeValueAsString(testMap);
  7. System.out.println(jsonStr);
  8. Map<String, Object> testMapDes = mapper.readValue(jsonStr, Map.class);
  9. System.out.println(testMapDes);
  10. 结果:
  11. {
  12. "date" : 1525164212803,
  13. "name" : "22",
  14. "student" : {
  15. "name" : "hyl",
  16. "age" : 20,
  17. "sendTime" : 1525164212803,
  18. "intList" : null
  19. },
  20. "age" : 20
  21. }
  22. {date=1525164212803, name=22, student={name=hyl, age=20, sendTime=1525164212803, intList=null}, age=20}

5)日期转json字符串

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

6)readTree()方法

        此方法更灵活,可以只将用户感兴趣的Json串信息值提取出来。主要利用ObjectMapper提供的readTree和Jackson提供的JsonNode类来实现

  1. String test="{"results":[{"objectID":357,"geoPoints":[{"x":504604.59802246094,"y":305569.9150390625}]},{"objectID":358,"geoPoints":[{"x":504602.2680053711,"y":305554.43603515625}]}]}";
  2. //此Json串比较复杂,包含了嵌套数组的形式,具有通用性。
  3. //2.2.2.2实现反序列化
  4. JsonNode node= objectMapper.readTree(test); //将Json串以树状结构读入内存
  5. JsonNode contents=node.get("results");//得到results这个节点下的信息
  6. for(int i=0;i<contents.size();i++) //遍历results下的信息,size()函数可以得节点所包含的的信息的个数,类似于数组的长度
  7. {
  8. System.out.println(contents.get(i).get("objectID").getIntValue()); //读取节点下的某个子节点的值
  9. JsonNode geoNumber=contents.get(i).get("geoPoints");
  10. for(int j=0;j<geoNumber.size();j++) //循环遍历子节点下的信息
  11. {
  12. System.out.println(geoNumber.get(j).get("x").getDoubleValue()+" "+geoNumber.get(j).get("y").getDoubleValue());
  13. }
  14. }

        

原文链接:https://blog.csdn.net/u011213044/article/details/120329436

标签:mapper,20,name,age,介绍,详细,new,ObjectMapper
From: https://www.cnblogs.com/sunny3158/p/17968428

相关文章

  • 最优订单执行算法相关Paper介绍
    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。随着量化交易、高频交易的竞争日益激烈,事实证明,交易执行显着影响量化策略的投资绩效。因此,许多从业者开始将交易执行视为一项独立的任务。本期文章分享,我们搜寻了一些用于最小化交易成本的最佳......
  • 最好使用的上网完整介绍与入门
    一.上网介绍V2提供了一个简洁而直观的用户界面,使用户可以轻松配置和管理V2的各种功能。它支持多种传输协议和代理方式,包括XX等。用户可以根据自己的需求选择合适的协议和代理方式来进行网络代理。作为市场上排名第一的梯子,V2可以做到xx能做的一切,链接到最快的服务器,保护用......
  • thinkphp5详细使用阿里云短信最新版
    1.我们下载官方完整包,PHP版本 https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.580.3rgXTq 解压后得到目录2.将目录里的api_sdk复制出来到tp5根目录的extend下面文件夹复制过去后,我们最好更改一下名称,比如我们更改为alisms。 3.使用方法直接......
  • 蓝牙,WIFI,超宽带(UWB),NFC以及红外线技术的介绍
    工作原理:1、红外线技术利用红外线光信号进行通信。红外线是一种电磁辐射,其频率低于可见光,无法被人眼所察觉。红外线通信设备通过发射和接收红外线光信号来进行数据传输。2、蓝牙技术是一种基于无线电波的短距离通信技术。它利用2.4GHz频段的无线电波进行通信,采用频分多址(FDMA......
  • 记录一次线上内存溢出排查详细过程
    现象生产上频繁出现调用异常的信息查询生产服务器日志初步评估:查看了这个方法没有性能瓶颈,应该是服务本身出现问题、后来找运维要了一下线上dumpfile文件:内存溢出、猜测可能存在内存泄漏MAT初步排查 从第一个页面来看,内存到达1.7G出现内存溢出问题一:为什么1.7G就溢出了,......
  • 文字识别(OCR)介绍与免费开源项目使用测评
    一、OCR介绍OCR英文全称是OpticalCharacterRecognition,中文叫做光学字符识别。它是通过扫描等光学技术与计算机技术结合的方式将各种证件、票据、文件及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。也就是说,ocr识别技术直接......
  • Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻
    概述ApacheDolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。ApacheDolphinScheduler旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种OPS编排......
  • Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻
    概述ApacheDolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。ApacheDolphinScheduler旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种OPS编......
  • 《nodejs安装篇》nodejs安装windows详细版
    参考链接:https://www.cnblogs.com/feiye512/p/12539306.html安装1、下载安装包下载地址:https://nodejs.org/zh-cn/download/根据自己电脑系统及位数选择,我这里选择windows64位.msi格式安装包.msi和.zip格式区别:1、.msi是Windowsinstaller开发出来的程序安装文件,它可以让你......
  • 《百图解码支付系统设计与实现》专栏介绍
    内容概览主要围绕一个虚拟的支付系统进行讲解。内容预计包括:专业术语解读、支付系统概述、产品和系统架构、核心业务逻辑、各核心子系统的设计,以及一些专项技术课题。将以实战经验为主线介绍这些内容,最大的目标就是希望能给大家带来一些启发:“原来还可以这样用”,或者“原来如此”。......