import com.alibaba.fastjson.JSON;
import com.imooc.vo.Person;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class JsonMapListUtil {
public static void main(String[] args) {
// Map 与 Json 互转
Map<Integer,Integer> integerMap=Map.of(11,22,44,55,66,77,100,200);
String integerMapString= JSON.toJSONString(integerMap,true);
System.out.println("integerMapString:"+integerMapString);
//默认类型 会转换成JSONObject类型,即 Map<String,Object>的子类
Map<String,Object> objMap=JSON.parseObject(integerMapString);
System.out.println("objMap: "+objMap);
//objMap: {"66":77,"11":22,"44":55,"100":200} 此时的key类型为String,与之前不一致
// 后面加 Map.class 转换为 Map类型,这个方式不是太好
Map<Integer,Integer> objMap22=JSON.parseObject(integerMapString,Map.class);
// Map<Object,Object> objMap22=JSON.parseObject(integerMapString,Map.class);
System.out.println("objMap22: "+objMap22);
// {66=77, 100=200, 11=22, 44=55} 此时结果是正确的,与之前的类型一致
for (Map.Entry<Integer,Integer> entry:objMap22.entrySet()){
System.out.println(entry.getKey() instanceof Integer); //全部 true
System.out.println(entry.getValue() instanceof Integer);//全部 true
}
Map<String,Integer> obj = new HashMap<>();
{
obj.put("key1", 200);
obj.put("key2", 11);
obj.put("key3", 33);
}
// Map 转 Json
String jsonResult=JSON.toJSONString(obj);
System.out.println("Map转JSON结果:"+jsonResult);
// 方法一、 Json 转 Map<String,Integer>
Map<String, Integer> params = JSON.parseObject(jsonResult, new TypeReference<Map<String, Integer>>(){});
System.out.println("params: "+params);
// 方法二、Json 转 Map
Map<String, Integer> params1 = JSONObject.parseObject(jsonResult, new TypeReference<Map<String,Integer>>(String.class,Integer.class){});
System.out.println("params1: "+params1);
System.out.println(params+" 各参数类型******");
for (Map.Entry<String,Integer> entry:params.entrySet()){
System.out.println(entry.getKey() instanceof String);
System.out.println(entry.getValue() instanceof Integer);
}
System.out.println(params1+" 各参数类型******");
for (Map.Entry<String,Integer> entry:params1.entrySet()){
System.out.println(entry.getKey() instanceof String);
System.out.println(entry.getValue() instanceof Integer);
}
//方法三、 Json 转 Map
System.out.println("新的方法:"+parseToMap(jsonResult,String.class,Integer.class));
//TypeReference protected类型 通过 实例化子类 或者 匿名类 的方式获取实例对象
TypeReference<Map<String,Integer>> typeReference=new TypeSon();
System.out.println("TypeReference 子类获取的类型:"+typeReference.getType().getTypeName());
}
// 继承自 TypeReference<T> 的子类
static class TypeSon extends TypeReference<Map<String,Integer>>{}
// json 转 Map 方法,带泛型的 Map
public static <k,v> Map<k,v> parseToMap(String json,Type k, Type v){
return JSON.parseObject(json,new TypeReference<Map<k,v>>(k,v){});
}
// List 与 Json 互转
List<Person> people=new ArrayList<>();
people.add(new Person("zhangsan"));
people.add(new Person("zhangsan22"));
people.add(new Person("zhangsan33"));
String peopleJson= JSON.toJSONString(people,true);
System.out.println("peopleJson:"+peopleJson);
List<Person> people1=JSON.parseArray(peopleJson,Person.class);
System.out.println("people1:"+people1);
List<String> pp=List.of("11","22","33");
String ppJson=JSON.toJSONString(pp,true);
System.out.println("ppJson:"+ppJson);
List<String> pp1=JSON.parseArray(ppJson,String.class);
System.out.println("pp1:"+pp1);
System.out.println("pp:"+pp);
List<Integer> ppp=List.of(11,22,33);
String pppJson=JSON.toJSONString(ppp,true);
System.out.println("pppJson:"+pppJson);
// List<Integer> ppp1=JSON.parseArray(pppJson,Integer.class);
List<Object> ppp1=JSON.parseArray(pppJson);
System.out.println("ppp1:"+ppp1);
System.out.println("ppp:"+ppp);
for (Object i:ppp1){
System.out.println(i instanceof Integer);
System.out.println(i instanceof String);
}
}
}