java--json与JavaBean,List,Map的使用

java--json与JavaBean,List,Map的使用,第1张

java--json与JavaBean,List,Map的使用

需要用到谷歌的一个jar包

gson.jar

测试的类

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", sex='" + sex + ''' +
                '}';
    }
}
//只需要写明继承的泛型,就可以作为参数传入了
public class PersonType extends TypeToken> {

}

 java--json与JavaBean,List,Map的使用

public class Test {
    public static void main(String[] args) {
        //javaBean与json字符串之间的转化
        Person person=new Person("小白",19,"男");
        Gson gson = new Gson();//创建谷歌的工具类
        //toJson();将对象转化为json字符串
        String s = gson.toJson(person);
        System.out.println(s);//{"name":"小白","age":19,"sex":"男"}
        //fromJson()将json字符串转化为传入的类对象
        person= gson.fromJson(s,Person.class);
        System.out.println(person.toString());//Person{name='小白', age=19, sex='男'}
        //List 与json之间的转化
        ArrayList people = new ArrayList<>();
        people.add(new Person("白小纯",20,"男"));
        people.add(new Person("孟浩",22,"男"));
        people.add(new Person("李清照",20,"女"));
        String s1 = gson.toJson(people);
        System.out.println(s1);//[{"name":"白小纯","age":20,"sex":"男"},{"name":"孟浩","age":22,"sex":"男"},{"name":"李清照","age":20,"sex":"女"}]
        //但是这样做的话就有缺陷
        //转化回集合类型
        ArrayList arrayList = gson.fromJson(s1, ArrayList.class);
        //发现原来传入集合的泛型失效了,全部的都变成gson包中的linkedTreeMap类型了
        for (Object o : arrayList) {
            System.out.println(o);
            System.out.println(o.getClass());//class com.google.gson.internal.linkedTreeMap
        }
        //所以我们需要换一种方式来使用
        Object o = gson.fromJson(s1, new PersonType().getType());
        System.out.println(o.getClass());//class java.util.ArrayList
        ArrayList list=(ArrayList)o;
        //再看元素类型
        System.out.println(list.get(0).getClass());//class projectTest.Person
        //Map类型与json字符串的转换
        HashMap personHashMap=new HashMap<>();
        personHashMap.put("p1",new Person("白小纯",20,"男"));
        personHashMap.put("p2",new Person("孟浩",22,"男"));
        String s2 = gson.toJson(personHashMap);
        System.out.println(s2);//{"p1":{"name":"白小纯","age":20,"sex":"男"},"p2":{"name":"孟浩","age":22,"sex":"男"}}
        //json'字符串转化为原来的对象
        HashMap map= gson.fromJson(s2,new TypeToken>(){}.getType());//直接使用匿名子类
        for (Map.Entry stringPersonEntry : map.entrySet()) {
            System.out.println(stringPersonEntry);
        }

    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5707885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存