Gson的基本使用方法(google)


原文:http://www.jianshu.com/p/e740196225a4

原作者:怪盜kidou

依賴包配置:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>

測試代碼:

import java.util.List;
import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

public class TestGson {

    private Gson gson = new Gson();

    /**
     * 測試main
     */
    public static void main(String[] args) {
        TestGson test = new TestGson();
        test.test9();
    }

    /**
     * json字符串轉基本數據類型(String雖不是基本數據類型,但是是值傳遞,與基本數據類型處理相似)
     */
    public void test1() {
        int i = gson.fromJson("100", int.class); // 100
        double d = gson.fromJson("\"99.99\"", double.class); // 99.99
        boolean b = gson.fromJson("true", boolean.class); // true
        String str = gson.fromJson("String", String.class); // String

        System.out.println(i);
        System.out.println(d);
        System.out.println(b);
        System.out.println(str);
    }

    /**
     * 基本數據類型轉json字符串(String雖不是基本數據類型,但是是值傳遞,與基本數據類型處理相似)
     */
    public void test2() {
        String jsonNumber = gson.toJson(100); // 100
        String jsonBoolean = gson.toJson(false); // false
        String jsonString = gson.toJson("String"); // "String"

        System.out.println(jsonNumber);
        System.out.println(jsonBoolean);
        System.out.println(jsonString);
    }

    /**
     * java對象轉json字符串
     */
    public void test3() {
        User user = new User("ZhangSan", 24);
        String jsonObject = gson.toJson(user); // {"name":"ZhangSan","age":24}

        System.out.println(jsonObject);
    }

    /**
     * json字符串轉java對象
     */
    public void test4() {
        String jsonString = "{\"name\":\"ZhangSan\",\"age\":24}";
        User user = gson.fromJson(jsonString, User.class);

        System.out.println(user.getName() + " | " + user.getAge() + " | " + user.getEmailAddress());
    }

    /**
     * @SerializedName()的使用_1
     */
    public void test5() {
        User user = new User("ZhangSan", 24, "abc@163.com");
        String jsonObject = gson.toJson(user);

        // User.emailAddress未加'@SerializedName("email_address")'時的轉換效果如下:
        // {"name":"ZhangSan","age":24,"emailAddress":"abc@163.com"}

        // User.emailAddress加了'@SerializedName("email_address")'時的轉換效果如下:
        // {"name":"ZhangSan","age":24,"email_address":"abc@163.com"}

        System.out.println(jsonObject);
    }

    /**
     * @SerializedName()的使用_2
     */
    public void test6() {
        String json = "{\"name\":\"ZhangSan\",\"age\":24,\"emailAddress\":\"abc_1@example.com\","
              +"\"email\":\"abc_2@example.com\",\"email_address\":\"abc_3@example.com\"}"; User user = gson.fromJson(json, User.class); System.out.println(user.emailAddress); // abc_3@example.com // 當上面的三個屬性(email_address、email、emailAddress)都中出現任意一個時均可以得到正確的結果。 // 注:當多種情況同時出時,以最后一個出現的值為准。 // 注:alternate需要2.4版本,本次測試的版本不可使用 } /** * json字符串轉基本類型數組(String雖不是基本數據類型,但是是值傳遞,與基本數據類型處理相似) */ public void test7() { String jsonArray = "[\"Android\",\"Java\",\"PHP\"]"; String[] strings = gson.fromJson(jsonArray, String[].class); System.out.println(strings[1]); } /** * TypeToken來實現對泛型的支持_1 將String[].class 直接改為 List<String>.class * 是行不通的。需要進行泛型擦除。 */ public void test8() { String jsonArray = "[\"Android\",\"Java\",\"PHP\"]"; List<String> stringList = gson.fromJson(jsonArray, (new TypeToken<List<String>>() { }).getType()); System.out.println(stringList.get(1)); } /** * TypeToken來實現對泛型的支持_2 */ @SuppressWarnings("serial") public void test9() { Result<List<User>> result = new Result<List<User>>(); result.setCode(200); result.setMessage("success"); result.setData(new ArrayList<User>() { { for (int i = 0; i < 2; i++) { this.add(new User("ZhangSan" + i, 25 + i, "abc@163.com")); } } }); // 不使用TypeToken無法將User的內容轉換出來 // fromJson()方法也是一樣需要使用TypeToken指定要轉換成的java對象類型 String gsonStr = gson.toJson(result, (new TypeToken<Result<List<User>>>() {}).getType()); System.out.println(gsonStr); } } class User { public String name; public int age; // @SerializedName("email_address") // test5()使用 // @SerializedName(value="emailAddress",alternate={"email","email_address"})//test6()使用 public String emailAddress; /** * 構造函數1 */ public User() { super(); } /** * 構造函數2 */ public User(String name, int age) { super(); this.name = name; this.age = age; } /** * 構造函數3 */ public User(String name, int age, String emailAddress) { super(); this.name = name; this.age = age; this.emailAddress = emailAddress; } // getters/setters(略) } class Result<T> { public int code; public String message; public T data; /** * 構造函數 */ public Result() { super(); } // getters/setters(略) }

 


免責聲明!

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



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