Scala中使用 Jackson API 进行JSON序列化和反序列化
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序列化和反序列化的更多相关文章
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- Java下用Jackson进行JSON序列化和反序列化(转)
Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- 在net中json序列化与反序列化
准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则: 数据在键值对中 数据由逗号分隔 花括 ...
- 在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出MethodArgumentNotValidException异常,因此,只需要在ExceptionHandler类中添加处理对应异常的方法即可。
在SpringMVC中,当Json序列化,反序列化失败的时候,会抛出HttpMessageNotReadableException异常, 当Bean validation失败的时候,会抛出Method ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo
Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...
- C# JSON 序列化和反序列化——JavaScriptSerializer实现
一. JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.您无法访问序列化程序的此实例.但是,此类公开了公共 API.因此, ...
随机推荐
- 对比不同版本windows对libreoffice的支持情况
由于最近需要用到libreoffice进行对文档转换为pdf,不光需要考虑在linux下的表现,还需要对比下Windows下的兼容性. 在网上各个论坛都找了下,以及libreoffice的中文社区发帖 ...
- RocketMQ的基本使用
第一步导入依赖: <!--Springboot 集成 RocketMQ依赖--> <dependency> <groupId>org.apache.rocketmq ...
- Jetpack架构组件学习(3)——Activity Results API使用
原文地址:Jetpack架构组件学习(3)--Activity Results API使用 - Stars-One的杂货小窝 技术与时俱进,页面跳转传值一直使用的是startActivityForRe ...
- 聊聊 C# 方法重载的底层玩法
最近在看 C++ 的方法重载,我就在想 C# 中的重载底层是怎么玩的,很多朋友应该知道 C 是不支持重载的,比如下面的代码就会报错. #include <stdio.h> int say( ...
- idea运行Tomcat出现 Address localhost:8080 is already in useAddress localhost:8080 is already in use
使用IDEA运行 tomcat时出现 Address localhost:8080 is already in use,就很奇怪,我明明只有这一个程序呀,怎么还会被占用.后来想想可能就是被其他进程占用 ...
- 关于vue项目中搜索节流的实现
我们经常会遇到这种需求,现在我们在使用百度搜索的时候他们的思想也是根据防抖节流而实现的,至于用防抖还是节流根据自己需求. <template> <input type="t ...
- Museui 图标速览,再也不用担心网页打不开了
更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_44519496/article/details/119328173
- canvas简易画布
今天学习了canvas,利用它做了一个简易版的画板,校验自己所学的知识,分享出来以供大家学习指教.先上效果图. 主要是使用了canvas的stroke和clearReact来实现画板的绘画和橡皮擦功能 ...
- SAP Office Excel Intergration
*&---------------------------------------------------------------------* *& Report DEMOEXCEL ...
- Python列表解析式的正确使用方式(一)
先来逼逼两句: Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法.在本文中,将会展示列表解析式 (List Comprehension).我们将讨论如何使用它?什 ...