• Java操作JSON数据(2)--Gson操作JSON数据


    Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象。本介绍下Gson的基本使用方法,包括序列化和反序列化;文中所使用到的软件版本:Java 1.8.0_191、Gson 2.8.6。

    1、引入依赖

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

    2、序列化

        public static String serialize() {
            MyBean bean = new MyBean();
            bean.setS("测试字符串");
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.HOUR_OF_DAY, -1);
            bean.setD(calendar.getTime());
    
            List<MyBean> list = new ArrayList<MyBean>();
            list.add(bean);
            Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
            map.put("data", list);
    
            Gson gson = new GsonBuilder()
                    .serializeNulls() //序列化值为null的字段
                    .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式
                    .excludeFieldsWithModifiers(Modifier.STATIC)//根据修饰符过滤字段
                    .create();
            String result = gson.toJson(map);
            System.out.println(result);
            return result;
        }

    3、反序列化

        public static void deserialize() {
            String s = serialize();
            Gson gson = new GsonBuilder()
                    .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式
                    .create();
            Type type = new TypeToken<Map<String, List<MyBean>>>(){}.getType();
            Map<String, List<MyBean>> map =  gson.fromJson(s, type);
            System.out.println(map);
            
            //直接通过api获取相应数据
            JsonElement element = JsonParser.parseString(s);
            JsonArray data = element.getAsJsonObject().getAsJsonArray("data");
            JsonObject bean = data.get(0).getAsJsonObject();
            System.out.println(bean.get("s").getAsString());
            //...
        }

    4、完整例子

    package com.inspur.demo.json;
    
    import java.lang.reflect.Modifier;
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.JsonArray;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import com.google.gson.reflect.TypeToken;
    
    /**
     * Gson操作JSON数据
     */
    public class GsonCase {
        /**
         * 序列化
         */
        public static String serialize() {
            MyBean bean = new MyBean();
            bean.setS("测试字符串");
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.HOUR_OF_DAY, -1);
            bean.setD(calendar.getTime());
    
            List<MyBean> list = new ArrayList<MyBean>();
            list.add(bean);
            Map<String, List<MyBean>> map = new HashMap<String, List<MyBean>>();
            map.put("data", list);
    
            Gson gson = new GsonBuilder()
                    .serializeNulls() //序列化值为null的字段
                    .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式
                    .excludeFieldsWithModifiers(Modifier.STATIC)//根据修饰符过滤字段
                    .create();
            String result = gson.toJson(map);
            System.out.println(result);
            return result;
        }
    
        /**
         * 反序列化
         */
        public static void deserialize() {
            String s = serialize();
            Gson gson = new GsonBuilder()
                    .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期格式
                    .create();
            Type type = new TypeToken<Map<String, List<MyBean>>>(){}.getType();
            Map<String, List<MyBean>> map =  gson.fromJson(s, type);
            System.out.println(map);
            
            //直接通过api获取相应数据
            JsonElement element = JsonParser.parseString(s);
            JsonArray data = element.getAsJsonObject().getAsJsonArray("data");
            JsonObject bean = data.get(0).getAsJsonObject();
            System.out.println(bean.get("s").getAsString());
            //...
        }
        
        public static void main(String[] args) {
            serialize();
            deserialize();
        }
    
    }
    GsonCase
    package com.inspur.demo.json;
    
    import java.util.Arrays;
    import java.util.Date;
    
    public class MyBean {
        private String s = "字符串";
        private String s2;
        private String s3 = "字符串3";
        private int i = 123;
        private Integer i2;
        private char c = '到';
        private char[] c2 = new char[]{'a', 'b'};
        private Date d = new Date();
        private Date[] d2 = new Date[]{new Date(), new Date()};
        public String getS() {
            return s;
        }
        public void setS(String s) {
            this.s = s;
        }
        public String getS2() {
            return s2;
        }
        public void setS2(String s2) {
            this.s2 = s2;
        }
        public String getS3() {
            return s3;
        }
        public void setS3(String s3) {
            this.s3 = s3;
        }
        public int getI() {
            return i;
        }
        public void setI(int i) {
            this.i = i;
        }
        public Integer getI2() {
            return i2;
        }
        public void setI2(Integer i2) {
            this.i2 = i2;
        }
        public char getC() {
            return c;
        }
        public void setC(char c) {
            this.c = c;
        }
        public char[] getC2() {
            return c2;
        }
        public void setC2(char[] c2) {
            this.c2 = c2;
        }
        public Date getD() {
            return d;
        }
        public void setD(Date d) {
            this.d = d;
        }
        public Date[] getD2() {
            return d2;
        }
        public void setD2(Date[] d2) {
            this.d2 = d2;
        }
        @Override
        public String toString() {
            return "MyBean [s=" + s + ", s2=" + s2 + ", s3=" + s3 + ", i=" + i + ", i2=" + i2 + ", c=" + c + ", c2="
                    + Arrays.toString(c2) + ", d=" + d + ", d2=" + Arrays.toString(d2) + "]";
        }
    }
    MyBean
  • 相关阅读:
    超300程序员受益入职的面试经验
    【修真院“正直”系列之三】【修真神界】【修行卷】【第一章】修真院入场券
    Js的同步异步以及回调函数
    Bootstrap栅格布局使用
    为什么程序员的工资比其他行业高这么多?
    Java培训机构可靠吗?
    get 与 post的区别?application json 与form表单的区别?
    谈谈以前端角度出发做好SEO需要考虑什么?
    【修真院“纯洁”系列之十九】驱逐令
    Redis缓存穿透和缓存雪崩以及解决方案
  • 原文地址:https://www.cnblogs.com/wuyongyin/p/12001016.html
Copyright © 2020-2023  润新知