GSON是谷歌提供的開源庫,用來解析Json格式的數據,非常好用。如果要使用GSON的話,則要先下載gson-2.2.4.jar這個文件,如果是在Android項目中使用,則在Android項目的libs目錄下添加這個文件即可;如果是在Java項目中,則把gson-2.2.4.jar先添加到當前項目的任意一個包中,然后右鍵點擊這個jar包 -> 構建路徑 -> 添加至構建路徑。這樣准備工作就做好了
簡單介紹下json
json表示:
JavaScript對象表示法(JavaScript Object Notation), 是一種輕量級的數據交換格式, 易於人閱讀和編寫, 同時也易於機器解析和生成。
json數據格式表示法:
對象是一個無序的“’名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。
json的主要組成部分:
JSON是object、array、string、number、boolean(true/false)和null。
一個具體的json實例:
{
"china":{
"hangzhou":{"item":"1"},
"shanghai":{"item":"2"},
"chengdu":{"item":"3"}
},
簡單的做法是:
toJson()將數據類型轉換成json數據格式
fromJson()將json格式數據轉換成對應的數據 類型
下面例子中我們采用一個簡單的util類,需要自己去編寫
public class GsonUtil {
// 定義一個json對象
public static Gson gson = new Gson();
// 將json數據轉換成對應的類型數據
public static <T> T parseJsonWithClass(String jsonData, Class<T> type) {
T result = gson.fromJson(jsonData, type);
return result;
}
// 將其他類型數據轉換成json數據
public static String parseToJson(Object jsonData) {
String result = gson.toJson(jsonData);
return result;
}
// 將json數據轉換成list集合
public static <T> List<T> parseJsonArrayWithGson(String jsonData, Class<T> type) {
List<T> result = gson.fromJson(jsonData, new TypeToken<List<T>>() {
}.getType());
return result;
}
}
寫兩個簡單的實體類
public class Person {
private String name;
private int age;
private List<Man> manList;
private Man man;
對應相應的get()和set()方法
加個toString()方法
}
public class Student {
private String name;
private int age;
private String sex;
private Date date;
對應相應的get()和set()方法
加個toString()方法
}
接下來說下使用Gson與java中的數據類型轉換
int num = 3;
System.out.println("int轉換成json" + (GsonUtil.parseToJson(num)));
String int_json = "{'num':11}";
// json數據跟String基本數據類型之間的轉化
String test = "hello";
System.out.println("String轉換成json數據" + (GsonUtil.parseToJson(test)));
// 多維數據轉換成json
int[][] intInt = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
String mutiArray = GsonUtil.parseToJson(intInt);
System.out.println("多維數據是:" + mutiArray);
// json轉換成多維數組
int[][] mutiInit = GsonUtil.parseJsonWithClass(mutiArray, int[][].class);
// 打印出數組中一維數據
for (int i = 0; i < mutiInit.length; i++) {
System.out.print(mutiInit[i] + " ");
}
System.out.println();
// 打印出數組中每條數據
for (int i = 0; i < mutiInit.length; i++) {
for (int j = 0; j < mutiInit[i].length; j++) {
System.out.println(mutiInit[i][j] + " ");
}
}
// map集合轉化成json
Map<String, String> map = new HashMap<String, String>();
map.put("name", "張三");
map.put("age", "20");
map.put("sex", "man");
String mapString = GsonUtil.parseToJson(map);
System.out.println(mapString);
// json轉化成map,list集合類似
Gson gson = new Gson();
Map map1 = gson.fromJson(mapString, new TypeToken<Map<String, String>>() {
}.getType());
System.out.println("json轉換map后的數據是" + map.get("name") + " " + map.get("age") + " " + map.get("sex"));
// json數據轉換日期格式
Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
Student stu = new Student("李四111", 20);
stu.setDate(new Date());
System.out.println("轉換成日期格式的student數據" + gson2.toJson(stu));
String stuJson = "{'name':'zhang','age':31,'date':'2016-12-12'}";
Student ss = gson2.fromJson(stuJson, Student.class);
System.out.println("輸出格式化的日期格式" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(ss.getDate()));
Date dd = new Date();
String ss1 = gson2.toJson(dd);
System.out.println("date轉換成json數據" + ss1);
Date dd1 = gson2.fromJson(ss1, Date.class);
System.out.println("json轉換成date日期格式數據是" + dd1);
// 實體對象中單條數據解析
String str1 = "{'name':'zhangsan1','age':11}";
Person p1 = GsonUtil.parseJsonWithClass(str1, Person.class);
System.out.println(p1.getName() + " " + p1.getAge());
// 實體中單條數據有嵌套數據
String str2 = "{'name':'zhangsan2','age':22,'man':{'name':'lisi','age':12}}";
Person p2 = GsonUtil.parseJsonWithClass(str2, Person.class);
System.out.println(p2.getName() + " " + p2.getAge() + " " + p2.getMan().toString());
// 實體中解析集合數據,多條json數據
String str = "[{'name':'John','age':20, 'man':{'name':'zhangsan3','age':33},'manList':[{'name':'English','age':100},{'name':'Math','age':78},{'name':'shuxue','age':98}]},{'name':'jack','age':33,'man': {'name':'zhangsan4','age':34},'manList':[{'name':'1111','age':33},{'name':'21213','age':55}]}]";
List<Person> pp = GsonUtil.parseJsonArrayWithGson(str, Person.class);
System.out.println("從json轉換后的數據:");
測試結果如下:
int轉換成json 3
String轉換成json數據 "hello"
多維數據是: [[1,2,3],[4,5,6],[7,8,9]]
[I@219c9a58 [I@305918a5 [I@2961116f
1
2
3
4
5
6
7
8
9
{"sex":"man","age":"20","name":"張三"}
json轉換map后的數據是 張三 20 man
轉換成日期格式的student數據 {"name":"李四111","age":20,"date":"2017-01-20"}
輸出格式化的日期格式 2016-12-12 00:00:00
date轉換成json數據 "2017-01-20"
json轉換成date日期格式數據是 Fri Jan 20 00:00:00 CST 2017
zhangsan1 11
zhangsan2 22 lisi 12
參考鏈接地址是:http://www.cnblogs.com/jiayongji/p/5297187.html