1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JSON序列化以及JSON反序列

JSON序列化以及JSON反序列

时间:2022-03-05 10:48:20

相关推荐

JSON序列化以及JSON反序列

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

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

工具包名:com.alibaba.fastjson.JSON

注意:包别导错了!特别用了多种不同工具类的包会直接报错

对象与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行@AllArgsConstructor@NoArgsConstructor@Data@Builder@ToStringpublic 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依赖地址:/artifact/cn.hutool/hutool-all

hutool JSON依赖地址:/artifact/cn.hutool/hutool-json

这两个依赖导一个就行了,hutool All内含了hutool JSON

工具包名:cn.hutool.json.JSONUtil

注意:包别导错了!特别用了多种不同工具类的包会直接报错

对象与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行@AllArgsConstructor@NoArgsConstructor@Data@Builder@ToStringpublic 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依赖地址:/artifact/com.fasterxml.jackson.core/jackson-core

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

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

工具包名:com.fasterxml.jackson.*

注意:包别导错了!特别用了多种不同工具类的包会直接报错

对象与Json的String类型的转换

实体类Neo.class

//这些是lombok的注释标签,自行编写set,get等方法也行@AllArgsConstructor@NoArgsConstructor@Data@Builder@ToStringpublic 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@ToStringpublic 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的话

如果有什么什么更好的方法,欢迎在评论区评论

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。