Map与JSON互相转换、List与JSON互相转换、对象与JSON互相转换

JSON的用处

在最近的开发中频繁的用到json,因为要做审核,需要审核的内容进行存储,这就用到了将信息转json存入数据库中。
我的需求中要保存的信息

  • 单个对象
  • 单个集合List, Map
  • 组合集合 任意两个集合的组合,集合中还有自己的泛型对象。

今天就遇到一个坑,将json反转成集合类型,中间遇到了类型不支持问题。我折腾了好久,但是我并不打算把这个问题整理出来。 我觉得转JSON是一个编程用得多得东西,只要我们有一套规范得使用方式,那这个知识就差不多掌握了。

应用场景

导依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.3</version>
</dependency>

1. 对象转与json互转

  • 将单个对象转成json,其中T就是我们要转成json的对象
 String jsonString = JSONObject.toJSONString(T);
  • 将json转成对象,这里的对象是之前转成json的对象,json就是我们要传承对象的内内容,T就是泛型
 T t= JSON.parseObject(json,T.class);

2. 单个集合和json互转

Lsit集合

  • 结合转json
List<User> list = new ArrayList<>();
String json = JSON.toJSONString(list);
  • json转集合
	String json="";
	List<User> list = JSON.parseArray(json,User.class);

3. Map集合,这里的T都是基本数据类型(String、int、short、char、double等)

  1. Map转json
Map<T,T> map= HashMap<T,T>;
String s = JSONObject.toJSONString(map);
  1. json转map
//直接强转
Map<T,T> map= (Map<String, Object>)json;

4. 多个集合组合成json(可以是不同的集合)

  • 转成json
 		JSONObject jsonObject = new JSONObject();
        //其实这里就相当于key,value形式进行存储
        jsonObject.put("ids",map集合);
        jsonObject.put("info",list集合);
        //将json对象转成String存储在数据库中
        String jsonN = JSON.toJSONString(jsonObject);
  • json转成集合
//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类型来区分不同部分。

5. json格式为 Map,这里的T都是基本数据类型(String、int、short、char、double等)

注意区分Map 这里的T都是基本数据类型(String、int、short、char、double等)

@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 info 解析出来。
其实这样的格式使用场景很多。

  1. 将User.nfo对象转成json,存入到数据库中
String jsonString= JSONObject.toJSONString(User.nfo);
//然后就将jsonString存入数据库就行了
  1. 将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);

6. json格式为 List,这里的T都是基本数据类型(String、int、short、char、double等)

  • 待续,等到自己开发用到,并总结出好的方法时再分享,以上都是我开发中实际用到的。
  • 再后面遇到类似的,我会再丰富这篇文章,觉得有用就收藏哦

你可能感兴趣的:(#,开发中的小知识,java,json,编程语言)