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.因此, ...
随机推荐
- 128_Power BI父级排名TOPN子级动态展示
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些天在和朋友交流Power BI中有这样一个需求,按照父级排名后,需要显示出父级TOPN的子级明细. 如下&l ...
- 学习Java的第十五天——数学运算
学习内容:数学运算 1.三角函数运算 代码实现: public class 三角函数运算 { public static void main(String[] args) { // TODO 自动生成 ...
- 使用 Postman 实现 API 自动化测试
背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉,对于开发人员和测试人员而言,使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式.但 postman 本身是一个 ...
- 《C Primer Plus》第六版笔记--1~3章
目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...
- 基于.NetCore开发博客项目 StarBlog - (11) 实现访问统计
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 【C++函数题目】重载求数组中最小值的函数
题目来源:https://acm.ujn.edu.cn Time Limit: 1 Sec Memory Limit: 128 MB Description 写一个函数名称为miniElement( ...
- 认识一下什么是JSP
摘要:JSP,全称是Java Server Pages,即Java服务器页面,是由Sun Microsystems公司主导创建的一种动态网页技术标准. 本文分享自华为云社区<Java服务器页面- ...
- 02 RESTFul接口和HTTP的幂等性分析
RESTFul接口和HTTP的幂等性分析 REST全称是Representational State Transfer,中文为表述性状态转移,REST指的是一组架构约束条件和原则 RESTful表述的 ...
- numpy学习笔记 01
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...
- Elasticsearch学习系列四(聚合搜索)
聚合分析 聚合分析是数据库中重要的功能特性,完成对一个查询的集中数据的聚合计算.如:最大值.最小值.求和.平均值等等.对一个数据集求和,算最大最小值等等,在ES中称为指标聚合,而对数据做类似关系型数据 ...