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 + "]"; } }