JSON序列化和反序列化
1、什么是json序列化和反序列化?
json序列化:就是JavaBean对象转化为JSON格式的字符串。
反序列化:就是序列化的反方向,将字符串转化为JavaBean。
2、为什么要序列化和反序列化?
现在比较流行前后端分离的项目,前后端分离就离不开传递数据,一种好的数据表示形式让开发者和网站能轻易识别是很重要的,而这个数据表示形式就是json。这时候问题又来了,前端要json字符串,后端要javaBean对象(假设后端采用java语言)怎么办?此时就需要json的序列化和反序列化了。
3、流行的类库
json处理有三个比较流行的类库,分别是阿里巴巴开发的FastJson,谷歌开发的Gosn,和Spring Boot内置的Jackson。
4、简单的json形式
{"myAge": 5,"myBirth": "2021-01-24 14:19:29 025","myName": "小狗"
}
下边以fastjson为例
JSONField() 注解
@JSONField(ordinal = 1) //指定json序列化的顺序
@JSONField(serialize = false) //json序列化时忽略该字段
@JSONField(deserialize = false) //json反序列化时转成对象将忽略该字段
@JSONField(format = “yyyy-MM-dd HH:mm:ss SSS”) //时间格式转换
常用的方法
JSONObject.toJSONString(value)
将value对象转化成json字符串
JSONObject.parseObject(value,java.class)
将value转化成java对象
JSONObject.parseArray(value,java.class)
将value转化成java对象数组
如果不写java.class,只写value,会转成JSONObject字符串。
代码:
创建一个maven项目,导入fastjson和lombok。
lombok中的注解可以让我们不生产get和set方法
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version></dependency>
1、创建Animal.java类
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Animal {@JSONField(name = "myName")private String myName;@JSONField(name = "myAge")private int myAge;@JSONField(name = "myBirth",format = "yyyy-MM-dd HH:mm:ss SSS")private Date myBirth;}
2、创建Persion.java类
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persion {@JSONField(name = "name")private String name;@JSONField(name = "age")private int age;@JSONField(name = "Birth" ,format = "yyyy-MM-dd HH:mm:ss SSS")private Date Birth;}
toJSONString() 的使用
将list集合转化成json
List<Persion> persions = new ArrayList<Persion>();persions.add(new Persion("张三", 16, new Date()));persions.add(new Persion("李四", 18, new Date()));persions.add(new Persion("王五", 20, new Date()));persions.add(new Persion("麻子", 22, new Date()));//将list集合转化成jsonString jsonPersion= JSON.toJSONString(persions);System.out.println(jsonPersion);
输出结果如下:
[{"Birth": "2021-01-24 14:33:43 229","age": 16,"name": "张三"
}, {"Birth": "2021-01-24 14:33:43 229","age": 18,"name": "李四"
}, {"Birth": "2021-01-24 14:33:43 229","age": 20,"name": "王五"
}, {"Birth": "2021-01-24 14:33:43 229","age": 22,"name": "麻子"
}]
将map集合转化成json
Map animal = new HashMap();animal.put("宠物狗",new Animal("小狗",5, new Date()));animal.put("波斯猫",new Animal("小猫",6, new Date()));animal.put("猪",new Animal("小猪",7, new Date()));//将list集合转化成jsonString jsonAnimal = JSON.toJSONString(animal);System.out.println(jsonAnimal);
输出结果如下:
{"宠物狗": {"myAge": 5,"myBirth": "2021-01-24 14:33:43 370","myName": "小狗"},"猪": {"myAge": 7,"myBirth": "2021-01-24 14:33:43 370","myName": "小猪"},"波斯猫": {"myAge": 6,"myBirth": "2021-01-24 14:33:43 370","myName": "小猫"}
}
多层封装
一般一个请求,都是有请求头和请求体,它们里面又会有各种参数。
现在假如说有一个world世界类,包含了动物Animal类和Persion类,代码如下。
创建一个world.java
@Data
public class World {@JSONField(name = "Persion")private Persion Persion;@JSONField(name = "Animal")private Animal Animal;
}
测试
World world = new World();Persion persion = new Persion("张三",18,new Date());Animal animal1 = new Animal("小狗",6,new Date());world.setPersion(persion);world.setAnimal(animal1);System.out.println(JSON.toJSONString(world));
输出结果
{"Animal": {"myAge": 6,"myBirth": "2021-01-24 15:32:31 392","myName": "小狗"},"Persion": {"Birth": "2021-01-24 15:32:31 392","age": 18,"name": "张三"}
}
实际封装的json要比和复杂一些。所以路还是很长的。
JSON序列化和反序列化相关推荐
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- JSON序列化和反序列化还有这种玩法
Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境-- 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...
Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...
- Go进阶(7): JSON 序列化和反序列化
1. json序列化和反序列化基础 json数据的序列化和反序列化是一种非常常见的方式,尤其是在http/rcp的微服务调试中. 基础语法 在 Go 中我们主要使用官方的 encoding/json ...
- 序列化对象C++对象的JSON序列化与反序列化探索
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...
- php和js序列化,PHP中serialize和json序列化与反序列化的区别
在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...
- python3 中的Json序列化、反序列化 和 字符编码的问题解决
python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...
- C#之json序列化与反序列化
http://106.86.154.29:5191/jsdecoder.wasm http://106.86.154.29:5191/webgl.js http://106.86.154.29:519 ...
- .NET MVC第九章、Web Api Json序列化与反序列化
.NET MVC第九章.Web Api Json序列化与反序列化 目录 .NET MVC第九章.Web Api Json序列化与反序列化 json数据格式 JSON 语法 返回对象 Json序列化 反 ...
最新文章
- 飞鸽传书(IPMSG)协议(翻译稿)
- [导入]php 安全基础 附录B. 函数
- 利用flex让页脚自适应置底显示
- android asmack调用MultiUserChat.getHostedRooms方法出现空指针的异常解决方案
- java 文件分割器_Java分割器
- 开课吧:Webpack的构建流程是什么?
- 删除倾斜OSGB数据中的漂浮物
- 河南职称计算机考试多少分通过,2019年河南职称计算机考试报名通知
- 九宫格按键输入(java)
- 用canvas实现九宫格切图之手把手教学(uniapp+ts)
- 微信小程序生成带logo二维码
- 【EtherCAT分析】三、EtherCAT从站设备描述文件设计
- 数据中台,我还能爱你吗(文末送书)
- cdh3.6.2集成zeppelin0.10.1及简单使用
- 威力曲面sw2020_威力曲面powersufacing_沐风网
- 止盈快回撤小但容易错过行情,怎样处理才能恰到好处?
- 编程求解问题。 若一头小母牛,从出生起第四个年头开始每年生一头小母牛,按此规律,第n年时有多少头小母牛
- Tomcat 启动时报 java.net.BindException: Address already in use[localhost:8005]
- 转载:解决wps linux中字体缺失以及文字体名字全是英文的问题
- 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码
热门文章
- 蓝海创意云渲染基础知识丨这些问题你都遇到过吗?
- 2021:Improved RAMEN: Towards Domain Generalization for Visual Question Answering
- Linux系统中的动态库和静态库
- 损耗角正切储能模量_设置材料的损耗角正切
- python学习 stackflow社区 python的机器学习库
- qq引流能赚钱吗?QQ推广引流赚钱技巧
- 折腾一天安装Centos7,以及后面恢复Win7引导的曲折历程
- unity中 判断目标在自身的方位
- php手机短信接口发送验证码,PHP手机短信接口发送验证码
- shell脚本中设置字体颜色