程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java-->Gson序列化及反序列化,java--gson序列化

Java-->Gson序列化及反序列化,java--gson序列化

編輯:JAVA綜合教程

Java-->Gson序列化及反序列化,java--gson序列化


--> 首先導入jar包,並添加到Build Path

--> 需要User類:有屬性、構造方法和setter、getter方法。

--> Test 測試類:

package com.dragon.java.gson;

import java.util.Arrays;
import java.util.List;

import com.dragon.java.json.User;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

/*
 Gson: Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。
 --> 可以將一個 JSON 字符串轉成一個 Java 對象,或者反過來。
 */
public class Test {
    public static void main(String[] args) {
        String json = "{\"name\": \"李四\", \"age\": 30}";
        String jsons = "[{\"name\": \"李四\", \"age\": 40},{\"name\": \"張三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}]";
        String jsonss = "{\"status\":\"ok\", \"data\": [{\"name\": \"李四\", \"age\": 30},{\"name\": \"張三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}] }";

        gsonFirst(json);
        System.out.println("----------------");
        gsonTypeToken(jsons);
        System.out.println("----------------");
        gsonFinal(jsonss);
        System.out.println("----------------");
        serializtion();
        System.out.println("----------------");
    }

    /**
     * 序列化
     */
    private static void serializtion() {
        // User user = new User("張三", 20);
        Gson gson = new Gson();
        // String jsonString = gson.toJson(user);

        User[] users = { new User("張三", 20), new User("李四", 30),
                new User("王五", 40) };
        // 把數組或可變參數轉換成集合。這個集合是不可變的集合,不能添加或排除元素
        List<User> userList = Arrays.asList(users);
        // 可以將集合變為可操作的集合 // new ArrayList<>().addAll(userlist);
        String json = gson.toJson(users);
        System.out.println(json);
        String json2 = gson.toJson(userList);
        System.out.println(json2);
    }

    /**
     * Gson解析
     * 
     * @param jsonss
     */
    private static void gsonFinal(String jsonss) {
        // 截取有用的字符串。也可以結合官方解析截取
        //String newJson = jsonss.substring(jsonss.indexOf("["),jsonss.lastIndexOf("]") + 1);
        Gson gson = new Gson();
        A a = gson.fromJson(jsonss, A.class);
        if (a.getStatus().equals("ok")) {
            System.out.println(a.getStatus());
            List<User> data = a.getData();
            for (User user : data) {
                System.out.println(user);
            }
        }
    }
    
    /**
     * TypeToken<>(){}
     * 
     * @param jsons
     */
    private static void gsonTypeToken(String jsons) {
        Gson gson = new Gson();
        // List users = gson.fromJson(jsons, List.class); // 泛型擦除:寫的任何的泛型類,變成.class之後泛型都會丟失
        TypeToken<List<User>> listType = new TypeToken<List<User>>() {
        }; // TypeToken<>(){} --> (protected)抽象類 --> 記住泛型的類型 --> new了TypeToken的匿名內部類 
        List<User> users = gson.fromJson(jsons, listType.getType());
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 解析Json字符串 
     * 反序列化
     * 
     * @param json
     */
    private static void gsonFirst(String json) {
        // 1、創建一個Gson對象
        Gson gson = new Gson();
        // 2、解析字符串
        // --> 必須有無參的構造函數
        // --> 每個屬性必須提供setter、getter方法
        User user = gson.fromJson(json, User.class);
        System.out.println(user);
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved