在最近的开发中频繁的用到json,因为要做审核,需要审核的内容进行存储,这就用到了将信息转json存入数据库中。
我的需求中要保存的信息
今天就遇到一个坑,将json反转成集合类型,中间遇到了类型不支持问题。我折腾了好久,但是我并不打算把这个问题整理出来。 我觉得转JSON是一个编程用得多得东西,只要我们有一套规范得使用方式,那这个知识就差不多掌握了。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
String jsonString = JSONObject.toJSONString(T);
T t= JSON.parseObject(json,T.class);
List<User> list = new ArrayList<>();
String json = JSON.toJSONString(list);
String json="";
List<User> list = JSON.parseArray(json,User.class);
Map<T,T> map= HashMap<T,T>;
String s = JSONObject.toJSONString(map);
//直接强转
Map<T,T> map= (Map<String, Object>)json;
JSONObject jsonObject = new JSONObject();
//其实这里就相当于key,value形式进行存储
jsonObject.put("ids",map集合);
jsonObject.put("info",list集合);
//将json对象转成String存储在数据库中
String jsonN = JSON.toJSONString(jsonObject);
//1. 将组合的String转换成json对象
JSONObject jsonObject1 = JSONObject.parseObject(组合的json);
//2. 转换Map集合,主要通过key值将对应的josn对象中的Map集合部分转换成Map集合,然后再遍历该集合,将集合中的信息保存到我们新建的Map集合中。
JSONObject ids1 = (JSONObject)jsonObject1.get("ids");
//将信息复制到新的Map集合中
Map<String,String> ids=new HashMap<>();
for(Map.Entry<String, Object> entry:ids1.entrySet()){
}
//3. 将List集合部分,也是通过key来定位是json对象中的哪个部分,这里一定要是getString("key"),使用强转成String会报错,我就在这里卡了很久。
List<DcMetadateCatalogEntity> fields = JSON.parseArray(jsonObject1.getString("info"), DcMetadateCatalogEntity.class);
Map<String,String> ids=new HashMap<>();
小小总结:
多个不同信息进行拼接成json,其实我们在转json时设置好key,value,在我们要转换回来时,直接根据key来定位哪个部分,在根据该部分的数据类型调用适合该类型的方法,就能将json转换回来。
不管时集合拼接,集合和对象拼接,不同对象之间拼接 都是一个原理。用key,vlaue类型来区分不同部分。
注意区分Map
@Data
public class Dog{
private int id ;
private String id;
}
@Data
public class User{
private String userId;
private String name;
private int age;
private String remark;
private Map<String , Dog> info;
}
需求是将User转为json,存入到数据库中,在把存入数据库中的数据拿出来,并把 Map
其实这样的格式使用场景很多。
String jsonString= JSONObject.toJSONString(User.nfo);
//然后就将jsonString存入数据库就行了
//思路就是,先转成JSONObject ,解析出来的数据结构就是Map类型,但是我们需要解析这个Map,并用一个新的Map来还原原本的泛型。
//1. 将数据库中的数据取出来,转换成JSONObject 。注意:jsonString不是固定的
JSONObject json= JSONObject.parseObject(jsonString);
//2. 再将数据还原为Map格式
Map<String,DcMetadateCatalogVo> MyMap= new HashMap<>();//新建的Map,已经设置好泛型了
//重新组装-方法01,将数据加入到我们新建的Map集合中
for (Map.Entry<String, Object> entry: json.entrySet()) {
Dog dog= JSON.parseObject(entry.getValue().toString(),Dog.class);
MyMap.put(entry.getKey(),dog);
//重新组装-方法02,将数据加入到我们新建的Map集合中
JSONObject o = (JSONObject) entry.getValue();
Dog dog = o.toJavaObject(Dog .class);
MyMap.put(entry.getKey(),dog);
}
这部分就是这样了,说真的,自己遇到的问题是下面代码。也就是将对象的转换。
Dog dog= JSON.parseObject(entry.getValue().toString(),Dog.class);
错误的事例,这里不能使用强转,会报错的。
Dog dog= JSON.parseObject((Dog)entry.getValue(),Dog.class);