- 简单说明
- 补充
- 工具
- 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先去问下部门的同事目前是否在用着hutool工具类。主题考虑一下目前使用的技术栈吧。毕竟如果后期淘汰了某些技术,你还需要回头来改这些。
↓ 还未上班的我们继续 ↓
FastJson
依赖地址:https://mvnrepository.com/artifact/com.alibaba/fastjson
工具包名:com.alibaba.fastjson.JSON
注意:包别导错了!特别用了多种不同工具类的包会直接报错
实体类Neo.class
//这些是lombok的注释标签,自行编写set,get等方法也行 @AllArgsConstructor @NoArgsConstructor @Data @Builder @ToString public class Neo { private int id; private String name; }
测试类主体:
@Test public 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类型的转换
测试类主体:
@Test public void ListTest(){ //新建个数组[1,2,3](我以Integer类型为例,List里边存对象也是可以的) Listlist = new ArrayList (){{ add(1); add(2); add(3); }}; //json序列化数组(注意要判空!不然会传入 jsonList="[]"反序列化时会出错 ) //if (list!=null && list.size()!=0) String listStr = JSON.toJSONString(list); //反序列化json数组并指定对象 List 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
注意:包别导错了!特别用了多种不同工具类的包会直接报错
实体类Neo.class
//这些是lombok的注释标签,自行编写set,get等方法也行 @AllArgsConstructor @NoArgsConstructor @Data @Builder @ToString public class Neo { private int id; private String name; }
测试类主体:
@Test public 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类型的转换
测试类主体:
@Test public void ListTest(){ //初始化一个数组(我以Integer类型为例,List里边存对象也是可以的) Listlist = new ArrayList (){{ add(1); add(2); add(3); }}; //json序列化数组(注意要判空!不然会传入 jsonList="[]"反序列化时会出错 ) String jsonList = JSONUtil.toJsonStr(list); //反序列化json数组并指定对象() List 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.*
注意:包别导错了!特别用了多种不同工具类的包会直接报错
实体类Neo.class
//这些是lombok的注释标签,自行编写set,get等方法也行 @AllArgsConstructor @NoArgsConstructor @Data @Builder @ToString public class Neo { private int id; private String name; }
测试类主体
@Test public 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; }
测试类主体:
@Test public void ListTest(){ //构建list<>数组 ListobjList = new ArrayList (){{ 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 ints = mapper.readValue(listStr,javaType); } catch (JsonProcessingException e) { e.printStackTrace(); } }
总结
目前总结了 Hutool、FastJson、JackSon 三种方法,各有个的好处;并没有什么排名的先后意思。后续还可能对Gson进行添加(我学的会的话
如果有什么什么更好的方法,欢迎在评论区评论
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)