
- 简单说明
- 补充
- 工具
- 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里边存对象也是可以的)
List list = 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里边存对象也是可以的)
List list = 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<>数组
List objList = 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条)