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序列化和反序列化相关推荐

  1. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  2. JSON序列化和反序列化还有这种玩法

    Mixin对于前端开发者可不陌生,Vue.React等知名前端框架都使用了Mixin.而对于后端开发,尤其是Java后端开发来说Mixin却是一个很陌生的概念.今天来我们通过Jackson让后端开发者 ...

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

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

  4. json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...

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

  5. Go进阶(7): JSON 序列化和反序列化

    1. json序列化和反序列化基础 json数据的序列化和反序列化是一种非常常见的方式,尤其是在http/rcp的微服务调试中. 基础语法 在 Go 中我们主要使用官方的 encoding/json  ...

  6. 序列化对象C++对象的JSON序列化与反序列化探索

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 一:背景 作为一名C++开发人员,我始终很期待能够像C#与JAVA那样,可以省力的进行对象的序列化与反序列化,但到现在为止,还没有找 ...

  7. php和js序列化,PHP中serialize和json序列化与反序列化的区别

    在PHP中,serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢? 假设一个对象和一个数组: PHP 1 2 3 4$web=newstdClass; $web-> ...

  8. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  9. C#之json序列化与反序列化

    http://106.86.154.29:5191/jsdecoder.wasm http://106.86.154.29:5191/webgl.js http://106.86.154.29:519 ...

  10. .NET MVC第九章、Web Api Json序列化与反序列化

    .NET MVC第九章.Web Api Json序列化与反序列化 目录 .NET MVC第九章.Web Api Json序列化与反序列化 json数据格式 JSON 语法 返回对象 Json序列化 反 ...

最新文章

  1. 飞鸽传书(IPMSG)协议(翻译稿)
  2. [导入]php 安全基础 附录B. 函数
  3. 利用flex让页脚自适应置底显示
  4. android asmack调用MultiUserChat.getHostedRooms方法出现空指针的异常解决方案
  5. java 文件分割器_Java分割器
  6. 开课吧:Webpack的构建流程是什么?
  7. 删除倾斜OSGB数据中的漂浮物
  8. 河南职称计算机考试多少分通过,2019年河南职称计算机考试报名通知
  9. 九宫格按键输入(java)
  10. 用canvas实现九宫格切图之手把手教学(uniapp+ts)
  11. 微信小程序生成带logo二维码
  12. 【EtherCAT分析】三、EtherCAT从站设备描述文件设计
  13. 数据中台,我还能爱你吗(文末送书)
  14. cdh3.6.2集成zeppelin0.10.1及简单使用
  15. 威力曲面sw2020_威力曲面powersufacing_沐风网
  16. 止盈快回撤小但容易错过行情,怎样处理才能恰到好处?
  17. 编程求解问题。 若一头小母牛,从出生起第四个年头开始每年生一头小母牛,按此规律,第n年时有多少头小母牛
  18. Tomcat 启动时报 java.net.BindException: Address already in use[localhost:8005]
  19. 转载:解决wps linux中字体缺失以及文字体名字全是英文的问题
  20. 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码

热门文章

  1. 蓝海创意云渲染基础知识丨这些问题你都遇到过吗?
  2. 2021:Improved RAMEN: Towards Domain Generalization for Visual Question Answering
  3. Linux系统中的动态库和静态库
  4. 损耗角正切储能模量_设置材料的损耗角正切
  5. python学习 stackflow社区 python的机器学习库
  6. qq引流能赚钱吗?QQ推广引流赚钱技巧
  7. 折腾一天安装Centos7,以及后面恢复Win7引导的曲折历程
  8. unity中 判断目标在自身的方位
  9. php手机短信接口发送验证码,PHP手机短信接口发送验证码
  10. shell脚本中设置字体颜色