JSON序列化数组或对象以及JSON反序列

  • 简单说明
    • 补充
  • 工具
    • FastJson
      • 对象与Json的String类型的转换
      • List<>数组与Json的String类型的转换
    • hutool工具类
      • 对象与Json的String类型的转换
      • List<>数组与Json的String类型的转换
    • JackSon
      • 对象与Json的String类型的转换
      • List<>数组与Json的String类型的转换
    • 总结

简单说明

关于json是什么我就不多去介绍了

以下只对 json格式的String类型 和 对象或数组 进行转换

如果需要将数据转json必须要分成以下两种情况,反序列化也一样

  • List<> 数组转JSON
  • 对象转JSON

map<>集合实际上就是对象;
set<>数组将相当与List<>数组 。

补充

如果目前正在企业上班的hxd先去问下部门的同事目前正在使用的Json工具类是什么。主要是考虑一下目前使用的技术栈吧。毕竟如果后期淘汰了某些技术,你还需要回头来改这些。

↓ 还未上班的我们继续 ↓

工具


FastJson

依赖地址:https://mvnrepository.com/artifact/com.alibaba/fastjson

工具包名:com.alibaba.fastjson.JSON
注意:包别导错了!特别用了多种不同工具类的包会直接报错

对象与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@ToString
public class Neo {private int id;private String name;
}

测试类主体:

  @Testpublic void ObjTest(){Neo object = new Neo(1,"象象");//Json序列化对象并存入String//(注意要判空!虽然不会报错,但是会调用对象的无参构造方法,会引起参数的错误判断)//if (object!=null)//objStr => {"id":1,"name":"象象"}String objStr = JSON.toJSONString(object);//反序列化json并转换为java类//neo.toString => Neo(id=1, name=象象)Neo neo = JSON.parseObject(objStr).toJavaObject(Neo.class);//只取JsonObj的部分数据>>直接调对应的get方法就好了JSON.parseObject(objStr).getInteger("id");JSON.parseObject(objStr).getString("name");}

List<>数组与Json的String类型的转换

测试类主体:

  @Testpublic void ListTest(){//新建个数组[1,2,3](我以Integer类型为例,List里边存对象也是可以的)List<Integer> list = new ArrayList<Integer>(){{add(1);add(2);add(3);}};//json序列化数组(注意要判空!不然会传入  jsonList="[]"反序列化时会出错 )//if (list!=null && list.size()!=0)String listStr = JSON.toJSONString(list);//反序列化json数组并指定对象List<Integer> ints = JSON.parseArray(listStr,Integer.class);}

以上就是FastJson的简单使用


hutool工具类

hutool All依赖地址:https://mvnrepository.com/artifact/cn.hutool/hutool-all
hutool JSON依赖地址:https://mvnrepository.com/artifact/cn.hutool/hutool-json
这两个依赖导一个就行了,hutool All内含了hutool JSON

工具包名:cn.hutool.json.JSONUtil
注意:包别导错了!特别用了多种不同工具类的包会直接报错

对象与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@ToString
public class Neo {private int id;private String name;
}

测试类主体:

  @Testpublic void ObjTest(){Neo object = new Neo(1,"象象");// json序列化对象//(注意要判空!虽然不会报错,但是会调用对象的无参构造方法,会引起参数的错误判断)// jsonObjStr => {"id":1,"name":"象象"}String jsonObjStr = JSONUtil.toJsonStr(object);// 反序列化json对象并指定对象// neo1.toString => Neo(id=1, name=象象)Neo neo1 = JSONUtil.toBean(jsonObjStr,Neo.class);// 取jsonStr反序列化的部分JSONObject jsonObject = JSONUtil.parseObj(jsonObjStr);Integer id = jsonObject.get("id", Integer.class);String name = jsonObject.get("name", String.class);}

List<>数组与Json的String类型的转换

测试类主体:

  @Testpublic void ListTest(){//初始化一个数组(我以Integer类型为例,List里边存对象也是可以的)List<Integer> list = new ArrayList<Integer>(){{add(1);add(2);add(3);}};//json序列化数组(注意要判空!不然会传入  jsonList="[]"反序列化时会出错 )String jsonList = JSONUtil.toJsonStr(list);//反序列化json数组并指定对象()List<Integer> ints = JSONUtil.parseArray(jsonList).toList(Integer.class);}

JackSon

jackson-core依赖地址:https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
jackson-databind依赖地址:https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
jackson-annotations依赖地址:https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations

工具包名:com.fasterxml.jackson.*
注意:包别导错了!特别用了多种不同工具类的包会直接报错

对象与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@ToString
public class Neo {private int id;private String name;
}

测试类主体

  @Testpublic void ObjTest(){ObjectMapper mapper = new ObjectMapper();try {Neo object = new Neo(1,"象象");// json序列化对象//(注意要判空!虽然不会报错,但是会调用对象的无参构造方法,会引起参数的错误判断)// objStr => {"id":1,"name":"象象"}String objStr = mapper.writeValueAsString(object);// 反序列化json对象并指定对象// neo.toString => Neo(id=1, name=象象)Neo neo = mapper.readValue(objStr,Neo.class);} catch (JsonProcessingException e) {e.printStackTrace();}}

List<>数组与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@ToString
public class Neo {private int id;private String name;
}

测试类主体:

  @Testpublic void ListTest(){//构建list<>数组List<Neo> objList = new ArrayList<Neo>(){{add(new Neo(1,"象象"));add(new Neo(2,"象象"));add(new Neo(3,"象象"));}};ObjectMapper mapper = new ObjectMapper();try {// json序列化数组// (注意要判空!不然会传入  jsonList="[]"反序列化时会出错 )// if (list!=null && list.size()!=0)// listStr => [{"id":1,"name":"象象"},{"id":2,"name":"象象"},{"id":3,"name":"象象"}]String listStr = mapper.writeValueAsString(objList);// 反序列化json数组并指定类型// 声明集合类型,使用mapper.getTypeFactory().constructParametricType(Class<?> CollectionType,Class<?> ParamType)// 如过List里边为Integer等基础类型封装类,也可以直接使用mapper.readValue(objStr,List.class),不过不推荐JavaType javaType =  mapper.getTypeFactory().constructParametricType(List.class, Neo.class);// ints.toString => [Neo(id=1, name=象象), Neo(id=2, name=象象), Neo(id=3, name=象象)]List<Neo> ints = mapper.readValue(listStr,javaType);} catch (JsonProcessingException e) {e.printStackTrace();}}

总结

目前总结了 Hutool、FastJson、JackSon 三种方法,各有个的好处;并没有什么排名的先后意思。后续还可能对Gson进行添加(我学会l的话
如果有什么什么更好的方法,欢迎在评论区评论

JSON序列化以及JSON反序列相关推荐

  1. 【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )

    文章目录 一.JSON 序列化工具 二.JSON 手动序列化 三.根据 JSON 编写 Dart 模型类 四.在线自动转换 五.相关资源 一.JSON 序列化工具 JSON 格式比较简单的话 , 使用 ...

  2. json 序列化 java_Java JSON序列化杂谈

    在C#中序列化是比较容易的,如果不用第三方的类库,那么C#提供的两个对象也够我们使用,一般的操作是定义一个不含有方法的类,这个类里面定义了要序列化的对象的属性,因为我C#用的比较多,这里直接给出泛型, ...

  3. json序列化c语言,C语言JSON序列化/反序列化

    最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...

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

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

  5. JavaScript JSON序列化和反序列化

    文章目录 JavaScript JSON序列化和反序列化 概述 JSON序列化 JSON.stringify() 仅一个参数使用 使用2个参数 使用3个参数 其他 自定义toJson 序列化顺序 反序 ...

  6. 二进制序列化器、XML序列化器、Json序列化器

    二进制序列化器.XML序列化器.Json序列化器 序列化是将对象的状态信息转换未可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区读取或反序列化 ...

  7. JSON.parse和JSON.stringify

    前言 JSON(JavaScript Object Notation)是一种语法,可用来序列化对象.数组.数值.字符串.布尔值和 null .它基于 JavaScript 语法,但与之不同:JavaS ...

  8. json序列化 java对象_Json 数据反序列化为Java对象

    前言:我们在项目中经常用到的是Json格式的数据,如果是将一个被Jackson转化为JSON数据格式的Java对象进行操作,我们就需要将JSON数据再反序列化为Java对象. 1.实体对象 packa ...

  9. C# Json 序列化与反序列化二

    /// <summary>/// 将对象转换为 JSON 字符串/// </summary>/// <typeparam name="T">&l ...

最新文章

  1. python 数据分析学习笔记 (第三章)
  2. JVM 最多支持多少个线程?
  3. 重磅 !《微信生态运营全景解读白皮书》,10 大热门场景、5 大案例剖析!
  4. Android—逐帧、补间、属性动画
  5. java drawimage 参数_小程序中canvas的drawImage方法参数使用详解
  6. 【嵌入式系统复习】嵌入式网络与协议栈
  7. 硬盘安装linux_Surface-Laptop3 安装Archlinux折腾小记
  8. invalid LOC header(bad signature)错误及解决
  9. linux 清空文件夹_弱电工程师-了解这些Linux命令,菜鸟也能变高手!
  10. linux命令行彩蛋,技术|11个无用而有趣的Linux终端彩蛋
  11. jq 目录树ajax,javascript
  12. 专业的Excel管理工具LibXL V3.8.0发布 | 附下载
  13. 解决:macOS下logisim左侧侧边栏被隐藏
  14. Java游戏编程不完全详解-2(1万2千字吐血推荐)
  15. 仿美团外卖源码加自己做了个模拟数据加载的效果
  16. AEJoy —— 表达式之模拟超越与反弹(五)【JS】
  17. c语言erfc函数,erf、erff、erfl、erfc、erfcf、erfcl
  18. java微信提现_如何做提现到微信和支付宝
  19. ASP.NET Core (视频)教程汇总
  20. TOM邮箱超级靓号来袭,12年送12年开始抢注了哦~

热门文章

  1. 全球及中国全装修行业投资状况与建设动态分析报告2022版
  2. 粉丝推荐的 GitHub 项目 yyds
  3. php 输出 csv 单元格内换行
  4. 基于jupyter notebook的python编程-----利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比
  5. Go语言中的goroutine
  6. 全国高校计算机能力挑战赛C语言编程题
  7. 【树莓派】快速上手Raspberry Pi 4B——组装硬件烧录系统
  8. 在“小程序”PWA上开发WebRTC
  9. Merry Xmas | 用Matplotlib画个3D圣诞树送给你!~
  10. mysql数据库导入1062_myMySQL数据库 出现1062错误怎么办 MySQL数据库使用教程