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

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

2. 依赖包 说明

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
依赖包说明:
# 提供注解支持
Maven: com.fasterxml.jackson.core:jackson-annotations:2.7.0
# 核心功能支持
Maven: com.fasterxml.jackson.core:jackson-core:2.10.1
Maven: com.fasterxml.jackson.core:jackson-databind:2.7.4

3. ObjectMapper

    功能:
ObjectMapper 提供了 读写Json的功能
读:
public <T> T readValue(String content, Class<T> valueType)
将 字符串content 反序列化 成 Class<T>类型的对象 写(可以把JSON字符串保存File、OutputStream等不同的介质中):
public void writeValue(File resultFile, Object value)
将 Objec转成 json字符串,并保存到 指定 File 内 public void writeValue(OutputStream out, Object value)
将 Objec转成 json字符串,并保存到 指定 OutputStream 内(使用 UTF8 编码) public byte[] writeValueAsBytes(Object value)
将 Objec转成 json字符串,并把结果输出成 字节数组 public String writeValueAsString(Object value)
将 Objec转成 json字符串,并把结果输出成 字符串

4. Json 注解

    @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性

    @JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
示例: @JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss") @JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称
示例: @JsonProperty("AliasName")

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

// TODO 用来转换的 Bean
case class UserBean(@BeanProperty name: String
, @BeanProperty age: Int
, @BeanProperty birthday: Date
, @BeanProperty email: String) // TODO Bean对象 => Json 字符串 (Json 序列化)
object Bean2Json extends App { val user: UserBean = UserBean("张飞", 21, new Date(), "hao123@163.com") val mapper: ObjectMapper = new ObjectMapper() // user 对象 转 json字符串
val beanJson: String = mapper.writeValueAsString(user) println(beanJson)
// {"name":"张飞","age":21,"birthday":1660115099317,"email":"hao123@163.com"} // scala 集合 转 json字符串
val list: Array[UserBean] = Array(
UserBean("刘备", 21, new Date(), "hao123@163.com"),
UserBean("关羽", 22, new Date(), "hao456@163.com"),
UserBean("张飞", 23, new Date(), "hao789@163.com")
) private val listJson: String = mapper.writeValueAsString(list) println(listJson)
// [{"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"}]
}

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

// TODO 由于 利用反射 对json串反序列化,所有必须有 空参构造 + get、set方法
class UserBean1() {
@BeanProperty var name: String = _
@BeanProperty var age: Int = _
@BeanProperty var birthday: Date = _
@BeanProperty var email: String = _ override def toString = s"UserBean1($name, $age, $birthday, $email)"
} // TODO Json 字符串 => Bean对象 (Json 反序列化)
object Json2Bean extends App {
val jsonBean: String =
"""
|{"name":"张飞","age":21,"birthday":1660115099317,"email":"hao123@163.com"}
""".stripMargin val jsonArray: String =
"""
|[{"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"}]
""".stripMargin val mapper: ObjectMapper = new ObjectMapper() // json 转 bean 对象
private val bean: UserBean1 = mapper.readValue(jsonBean, classOf[UserBean1]) // json 数组 转 bean 对象数组
private val array: Array[UserBean1] = mapper.readValue(jsonArray, classOf[Array[UserBean1]]) array.foreach(println(_)) println(bean)
}

7. 使用注解

class UserBean2() {
@JsonIgnore //进行JSON操作时忽略该属性
@BeanProperty var name: String = _ @BeanProperty var age: Int = _ @JsonFormat(pattern = "yyyy-MM-dd") // 格式化日期属性
@BeanProperty var birthday: Date = _ @JsonProperty("mail_Alias")
@BeanProperty var email: String = _ override def toString = s"UserBean2($name, $age, $birthday, $email)"
} // TODO 使用注解
object Bean2Json_Anno extends App { val user: UserBean2 = new UserBean2() user.setAge(21)
user.setName("张飞")
user.setBirthday(new Date())
user.setEmail("hao123@163.com") val mapper: ObjectMapper = new ObjectMapper() // user 对象 转 json字符串
val beanJson: String = mapper.writeValueAsString(user) println(beanJson)
// {"age":21,"birthday":"2022-08-10","mail_Alias":"hao123@163.com"} }

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. 耗时半年,Eoapi 终于正式发布 API 工具的插件广场

      这是我们的第一篇月报,每个月和每个来之不易的开发者分享产品故事以及产品进展. 在 5.20 这个极具中国特色的"节日"里,Eoapi 发布了 1.0.0 版,三个程序员掉了半年 ...

  2. CabloyJS 基于 EggJS 实现的模块编译与发布

    背景 现在,EggJS被许多开发团队所采用.有的团队基于商业知识产权的考量,往往会提一个问题:是否可以把EggJS当中的代码编译打包,然后再把代码丑化? 模块编译的机制 EggJS为何不能便利的实现编 ...

  3. 开发工具-SVG占位图片

    更新日志 2022年6月10日 初始化链接. https://toolb.cn/imageholder

  4. Volcano社区v1.6.0版本正式发布

    摘要:Volcano社区v1.6.0版本正式发布.此次版本增加了弹性作业管理.基于真实负载的动态调度. 基于真实负载的重调度.Volcano Job插件--MPI等多个新特性. 本文分享自华为云社区& ...

  5. Skywalking光会用可不行,必须的源码分析分析 - Skywalking Agent &插件解析

    3 Skywalking源码导入 接上文,已经学习了Skywalking的应用,接下来我们将剖析Skywalking源码,深度学习Skywalking Agent. 3.1 源码环境搭建 当前最新版本 ...

  6. 论文解读(SR-GNN)《Shift-Robust GNNs: Overcoming the Limitations of Localized Graph Training Data》

    论文信息 论文标题:Shift-Robust GNNs: Overcoming the Limitations of Localized Graph Training Data论文作者:Qi Zhu, ...

  7. dubbox、zookeeper BUG记录

    主要错误信息: dubbo:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method... Caused by: com.alib ...

  8. Django WEB开发 - Django 3.0 Tutorial入门

    1. Django 官方网站 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial01/ 2. Model View Controller ...

  9. Linux操作系统(6):进程管理和服务管理

    进程的基本介绍 1)在 LINUX 中,每个执行的程序(代码)都称为一个进程.每一个进程都分配一个 ID 号. 2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程.例如 www 服务器 ...

  10. Elasticsearch深度应用(上)

    索引文档写入和近实时搜索原理 基本概念 Segments in Lucene 众所周知,Elasticsearch存储的基本单元是shard,ES种一个index可能分为多个shard,事实上每个sh ...