zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    D3D资源管理
    地形有必要做LOD吗?
    J2SE IO编程
    J2SE 枚举类型 [enum]
    Struts2 DefaultAction (默认Action)
    J2SE 内部类 [Inner]
    J2SE 断言 [Assert]
    JavaScript
    SCM_CVS_SVN 版本控制器
    Struts2 IncludeModules(包含 <include file="login.xml" />)
  • 原文地址:https://www.cnblogs.com/xmcx1995/p/5806389.html
Copyright © 2011-2022 走看看