1.  什么是 Json 序列化 和 反序列化

  1. 序列化 => Java对象 转换成 json字符串
    反序列化 => json字符串 转换成 Java对象

2. 依赖包 说明

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-databind</artifactId>
  4. <version>2.7.4</version>
  5. </dependency>
  6. 依赖包说明:
  7. # 提供注解支持
  8. Maven: com.fasterxml.jackson.core:jackson-annotations:2.7.0
  9. # 核心功能支持
  10. Maven: com.fasterxml.jackson.core:jackson-core:2.10.1
  11. Maven: com.fasterxml.jackson.core:jackson-databind:2.7.4

3. ObjectMapper

  1. 功能:
  2. ObjectMapper 提供了 读写Json的功能
  3. 读:
  4. public <T> T readValue(String content, Class<T> valueType)
  5. 字符串content 反序列化 Class<T>类型的对象
  6.  
  7. 写(可以把JSON字符串保存FileOutputStream等不同的介质中):
  8. public void writeValue(File resultFile, Object value)
  9. Objec转成 json字符串,并保存到 指定 File
  10.  
  11. public void writeValue(OutputStream out, Object value)
  12. Objec转成 json字符串,并保存到 指定 OutputStream 内(使用 UTF8 编码)
  13.  
  14. public byte[] writeValueAsBytes(Object value)
  15. Objec转成 json字符串,并把结果输出成 字节数组
  16.  
  17. public String writeValueAsString(Object value)
  18. Objec转成 json字符串,并把结果输出成 字符串

4. Json 注解

  1. @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性
  2.  
  3. @JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
  4. 示例: @JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
  5.  
  6. @JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称
  7. 示例: @JsonProperty("AliasName")

5. Bean对象 => Json 字符串 (Json 序列化)

  1. // TODO 用来转换的 Bean
  2. case class UserBean(@BeanProperty name: String
  3. , @BeanProperty age: Int
  4. , @BeanProperty birthday: Date
  5. , @BeanProperty email: String)
  6.  
  7. // TODO Bean对象 => Json 字符串 (Json 序列化)
  8. object Bean2Json extends App {
  9.  
  10. val user: UserBean = UserBean("张飞", 21, new Date(), "hao123@163.com")
  11.  
  12. val mapper: ObjectMapper = new ObjectMapper()
  13.  
  14. // user 对象 转 json字符串
  15. val beanJson: String = mapper.writeValueAsString(user)
  16.  
  17. println(beanJson)
  18. // {"name":"张飞","age":21,"birthday":1660115099317,"email":"hao123@163.com"}
  19.  
  20. // scala 集合 转 json字符串
  21. val list: Array[UserBean] = Array(
  22. UserBean("刘备", 21, new Date(), "hao123@163.com"),
  23. UserBean("关羽", 22, new Date(), "hao456@163.com"),
  24. UserBean("张飞", 23, new Date(), "hao789@163.com")
  25. )
  26.  
  27. private val listJson: String = mapper.writeValueAsString(list)
  28.  
  29. println(listJson)
  30. // [{"name":"刘备","age":21,"birthday":1660115099712,"email":"hao123@163.com"},{"name":"关羽","age":22,"birthday":1660115099712,"email":"hao456@163.com"},{"name":"张飞","age":23,"birthday":1660115099712,"email":"hao789@163.com"}]
  31. }

6. Json 字符串 => Bean对象 (Json 反序列化)

  1. // TODO 由于 利用反射 对json串反序列化,所有必须有 空参构造 + get、set方法
  2. class UserBean1() {
  3. @BeanProperty var name: String = _
  4. @BeanProperty var age: Int = _
  5. @BeanProperty var birthday: Date = _
  6. @BeanProperty var email: String = _
  7.  
  8. override def toString = s"UserBean1($name, $age, $birthday, $email)"
  9. }
  10.  
  11. // TODO Json 字符串 => Bean对象 (Json 反序列化)
  12. object Json2Bean extends App {
  13. val jsonBean: String =
  14. """
  15. |{"name":"张飞","age":21,"birthday":1660115099317,"email":"hao123@163.com"}
  16. """.stripMargin
  17.  
  18. val jsonArray: String =
  19. """
  20. |[{"name":"刘备","age":21,"birthday":1660115099712,"email":"hao123@163.com"},{"name":"关羽","age":22,"birthday":1660115099712,"email":"hao456@163.com"},{"name":"张飞","age":23,"birthday":1660115099712,"email":"hao789@163.com"}]
  21. """.stripMargin
  22.  
  23. val mapper: ObjectMapper = new ObjectMapper()
  24.  
  25. // json 转 bean 对象
  26. private val bean: UserBean1 = mapper.readValue(jsonBean, classOf[UserBean1])
  27.  
  28. // json 数组 转 bean 对象数组
  29. private val array: Array[UserBean1] = mapper.readValue(jsonArray, classOf[Array[UserBean1]])
  30.  
  31. array.foreach(println(_))
  32.  
  33. println(bean)
  34. }

7. 使用注解

  1. class UserBean2() {
  2. @JsonIgnore //进行JSON操作时忽略该属性
  3. @BeanProperty var name: String = _
  4.  
  5. @BeanProperty var age: Int = _
  6.  
  7. @JsonFormat(pattern = "yyyy-MM-dd") // 格式化日期属性
  8. @BeanProperty var birthday: Date = _
  9.  
  10. @JsonProperty("mail_Alias")
  11. @BeanProperty var email: String = _
  12.  
  13. override def toString = s"UserBean2($name, $age, $birthday, $email)"
  14. }
  15.  
  16. // TODO 使用注解
  17. object Bean2Json_Anno extends App {
  18.  
  19. val user: UserBean2 = new UserBean2()
  20.  
  21. user.setAge(21)
  22. user.setName("张飞")
  23. user.setBirthday(new Date())
  24. user.setEmail("hao123@163.com")
  25.  
  26. val mapper: ObjectMapper = new ObjectMapper()
  27.  
  28. // user 对象 转 json字符串
  29. val beanJson: String = mapper.writeValueAsString(user)
  30.  
  31. println(beanJson)
  32. // {"age":21,"birthday":"2022-08-10","mail_Alias":"hao123@163.com"}
  33.  
  34. }

Scala中使用 Jackson API 进行JSON序列化和反序列化的更多相关文章

  1. Net中JSON序列化和反序列化处理(日期时间特殊处理)

    0  缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...

  2. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

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

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

  4. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  5. 在net中json序列化与反序列化

    准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则: 数据在键值对中 数据由逗号分隔 花括 ...

  6. 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。

    在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...

  7. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  8. Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  9. C# JSON 序列化和反序列化——JavaScriptSerializer实现

    一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...

随机推荐

  1. 128_Power BI父级排名TOPN子级动态展示

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些天在和朋友交流Power BI中有这样一个需求,按照父级排名后,需要显示出父级TOPN的子级明细. 如下&l ...

  2. 学习Java的第十五天——数学运算

    学习内容:数学运算 1.三角函数运算 代码实现: public class 三角函数运算 { public static void main(String[] args) { // TODO 自动生成 ...

  3. 使用 Postman 实现 API 自动化测试

    背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉,对于开发人员和测试人员而言,使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式.但 postman 本身是一个 ...

  4. 《C Primer Plus》第六版笔记--1~3章

    目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...

  5. 基于.NetCore开发博客项目 StarBlog - (11) 实现访问统计

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  6. 【C++函数题目】重载求数组中最小值的函数

    题目来源:https://acm.ujn.edu.cn Time Limit: 1 Sec  Memory Limit: 128 MB Description 写一个函数名称为miniElement( ...

  7. 认识一下什么是JSP

    摘要:JSP,全称是Java Server Pages,即Java服务器页面,是由Sun Microsystems公司主导创建的一种动态网页技术标准. 本文分享自华为云社区<Java服务器页面- ...

  8. 02 RESTFul接口和HTTP的幂等性分析

    RESTFul接口和HTTP的幂等性分析 REST全称是Representational State Transfer,中文为表述性状态转移,REST指的是一组架构约束条件和原则 RESTful表述的 ...

  9. numpy学习笔记 01

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...

  10. Elasticsearch学习系列四(聚合搜索)

    聚合分析 聚合分析是数据库中重要的功能特性,完成对一个查询的集中数据的聚合计算.如:最大值.最小值.求和.平均值等等.对一个数据集求和,算最大最小值等等,在ES中称为指标聚合,而对数据做类似关系型数据 ...