zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    laravel使用ORM或者DB使用select进行查询指定字段时,可以给字段设置固定值
    sql语句左链接left join--3张表关联
    mysql将字符串转成数字
    laravelORM查询构建器查询,在排序中计算
    php 商品以元为单位设置保留两位小数
    php中根据二维数组中一维数组的某个字段进行排序
    js sort方法根据数组中对象的某一个属性值进行排序
    MySQL中查询表及索引大小的方法
    c++ const成员函数
    c++ sizeof和strlen 字符数组和字符指针
  • 原文地址:https://www.cnblogs.com/wuyongyin/p/12001016.html
Copyright © 2011-2022 走看看