Json与任意类型对象转换的两种实现

      之前写过一篇关于JSON的博客,里面简单的介绍了JSON的基本概念以及几个组成要素以及Gson的使用,今天就来简单的实现一下通过Gson实现任意对象与JSON 字符串之间的转换:

1,对象与JSON字符串之间互相转换

(1)普通对象转JSON字符串

Person p1=new Person(26,"why","male");
Gson gson =new Gson();
String gsonStr=gson.toJson(p1);
System.out.println("Object to Json String:"+gsonStr);

(2)JSON字符串转普通对象

方式1:

Person p2=gson.fromJson(gsonStr,Person.class);
System.out.println("Json String to Object:"+p2.toString());

方式2:

Type type1 = new TypeToken<Person>() {
}.getType();

Person p2=gson.fromJson(gsonStr, type1);
System.out.println("Json String to Object:"+p2.toString());

(3)集合对象转JSON字符串

List<Person> selfDefElementlist=new ArrayList<>();
selfDefElementlist.add(new Person(26,"why","male"));
selfDefElementlist.add(new Person(24,"jr","female"));
selfDefElementlist.add(new Person(3,"love","male"));
String list2ToStr=gson.toJson(selfDefElementlist);
System.out.println("Self Define Element List to Json String:"+list2ToStr);

(4)JSON字符串转集合对象

方式1:

List<Person> selfDefElementlist1=new ArrayList<>();
selfDefElementlist1=gson.fromJson(list2ToStr, selfDefElementlist1.getClass());
System.out.println("Json String to Self Define Element List :"+selfDefElementlist1.toString());

方式2:

Type type3 = new TypeToken<List<Person>>() {
}.getType();
List<Person> selfDefElementlist2=gson.fromJson(list2ToStr, type3);
System.out.println("Json String to Self Define Element List :"+selfDefElementlist2.toString());

对于JSON转集合对象,建议使用第二种方式,第一种方式有可能会导致数据类型发生变化,参见如下日志:

附:

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

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

    public Person(Person p) {
        this.age = p.age;
        this.name = p.name;
        this.sex = p.sex;
    }

    @Override
    public String toString() {
        return "Person [age=" + age + ", name=" + name + ", sex=" + sex + "]";
    }

}

猜你喜欢

转载自blog.csdn.net/hfut_why/article/details/83117090