gson實現字串與物件的相互轉換
最近一個專案需要用到JSON,需要在JSON字串和物件之間相互轉換,在網上找了些資料,發現google的Gson還是比較不錯的。
廢話不說,下面是簡單的例子:
先上原始碼:下載(包含jar包)
Person實體類
[java] view plain copy print?- package com.hsun.json;
- /**
- * Person 實體類
- * @author hsun
- *
- */
- publicclass Person {
- privateint id;
- private String name;
- privateint age;
- publicint
- return id;
- }
- publicvoid setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name;
- }
- publicint getAge() {
- return age;
- }
- publicvoid
- this.age = age;
- }
- @Override
- public String toString() {
- return“Person [id=” + id + “, 姓名=” + name + “, 年齡=” + age + “]”;
- }
- }
實體很簡單,當然Person的欄位也可以是List、Set、Map等~~~package com.hsun.json; /** * Person 實體類 * @author hsun * */ public class Person { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", 姓名=" + name + ", 年齡=" + age + "]"; } }
把物件轉為JSON格式的字串
[java] view plain copy print?- Gson gs = new Gson();
- Person person = new Person();
- person.setId(1);
- person.setName(”我是醬油”);
- person.setAge(24);
- String objectStr = gs.toJson(person);//把物件轉為JSON格式的字串
- System.out.println(”把物件轉為JSON格式的字串/// ”+objectStr);
Gson gs = new Gson();
Person person = new Person();
person.setId(1);
person.setName("我是醬油");
person.setAge(24);
String objectStr = gs.toJson(person);//把物件轉為JSON格式的字串
System.out.println("把物件轉為JSON格式的字串/// "+objectStr);
上面的程式碼重點是Gson物件,它提供了toJason()方法將物件轉換成Json字串,上面程式碼的objectStr物件值為:
{“id”:1,”name”:”我是醬油”,”age”:24}
把List轉為JSON格式的字串
[java] view plain copy print?- Gson gs = new Gson();
- List<Person> persons = new ArrayList<Person>();
- for (int i = 0; i < 10; i++) {//初始化測試資料
- Person ps = new Person();
- ps.setId(i);
- ps.setName(”我是第”+i+“個”);
- ps.setAge(i+10);
- persons.add(ps);
- }
- String listStr = gs.toJson(persons);//把List轉為JSON格式的字串
- System.out.println(”把list轉為JSON格式的字串/// ”+listStr);
Gson gs = new Gson();
List<Person> persons = new ArrayList<Person>();
for (int i = 0; i < 10; i++) {//初始化測試資料
Person ps = new Person();
ps.setId(i);
ps.setName("我是第"+i+"個");
ps.setAge(i+10);
persons.add(ps);
}
String listStr = gs.toJson(persons);//把List轉為JSON格式的字串
System.out.println("把list轉為JSON格式的字串/// "+listStr);
上面程式碼的listStr物件值為:
[{“id”:0,”name”:”我是第0個”,”age”:10},{“id”:1,”name”:”我是第1個”,”age”:11},{“id”:2,”name”:”我是第2個”,”age”:12},{“id”:3,”name”:”我是第3個”,”age”:13},{“id”:4,”name”:”我是第4個”,”age”:14},{“id”:5,”name”:”我是第5個”,”age”:15},{“id”:6,”name”:”我是第6個”,”age”:16},{“id”:7,”name”:”我是第7個”,”age”:17},{“id”:8,”name”:”我是第8個”,”age”:18},{“id”:9,”name”:”我是第9個”,”age”:19}]
很標準的json資料~~~
下面來看看gson的反序列化,Gson提供了fromJson()方法來實現從Json相關物件到Java實體的方法。
我們一般都會碰到兩種情況,1:轉成單一實體物件 2:轉換成物件列表或者其他結構。
先看第一種:
JSON字串為上面的objectStr:{“id”:1,”name”:”我是醬油”,”age”:24}
程式碼:
- Person jsonObject = gs.fromJson(objectStr, Person.class);//把JSON字串轉為物件
- System.out.println(”把JSON字串轉為物件/// ”+jsonObject.toString());
Person jsonObject = gs.fromJson(objectStr, Person.class);//把JSON字串轉為物件
System.out.println("把JSON字串轉為物件/// "+jsonObject.toString());
提供兩個引數,分別是json字串以及需要轉換物件的型別。
第二種,轉換成列表型別:
JSON字串為上面的listStr:[{“id”:0,”name”:”我是第0個”,”age”:10},{“id”:1,”name”:”我是第1個”,”age”:11},{“id”:2,”name”:”我是第2個”,”age”:12},{“id”:3,”name”:”我是第3個”,”age”:13},{“id”:4,”name”:”我是第4個”,”age”:14},{“id”:5,”name”:”我是第5個”,”age”:15},{“id”:6,”name”:”我是第6個”,”age”:16},{“id”:7,”name”:”我是第7個”,”age”:17},{“id”:8,”name”:”我是第8個”,”age”:18},{“id”:9,”name”:”我是第9個”,”age”:19}]
程式碼:
[java] view plain copy print?- List<Person> jsonListObject = gs.fromJson(listStr, new TypeToken<List<Person>>(){}.getType());//把JSON格式的字串轉為List
- for (Person p : jsonListObject) {
- System.out.println(”把JSON格式的字串轉為List/// ”+p.toString());
- }
List<Person> jsonListObject = gs.fromJson(listStr, new TypeToken<List<Person>>(){}.getType());//把JSON格式的字串轉為List
for (Person p : jsonListObject) {
System.out.println("把JSON格式的字串轉為List/// "+p.toString());
}
可以看到上面的程式碼使用了TypeToken,它是Gson提供的資料型別轉換器,可以支援各種資料集合型別轉換。
Gson的基本使用就這麼多,其他請參考官方文件,希望對你們有幫助~~~