使用google的GSON解析json格式的數據


      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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM