• Gson反序列json到实体类


    gson在基准测试过程中各项性能接近于Jackson(具体可以看Benchmark of Java JSON libraries)里面的测试,

    本人亲测过,实测结果与他的数据一致,Jackson安全性以及性能稳定性毋庸置疑。

    笔者当初连续遇到过fastjson多个bug,最终放弃他,投入Jackson怀抱;但是Jackson api使用起来配置比较多。

    也就是api不够简洁,有些场景我的json很简单,只需要从json到实体之间互相转换(序列化与反序列化)。

    gson的api比较简单,也是这篇文章的由来,以下是反序列化代码。

    @SerializedName用来指明json中与实体字段名不一致问题。

    import com.google.gson.annotations.SerializedName;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    /***
     * ASR服务器状态
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class ASRServerStatus {
    
    
        /***
         * 当前空闲的worker数目
         */
        @SerializedName("num_workers_available")
        private Integer availWorkers;
    
    
        //以下字段后续在python服务器端采集上来加入,目前接口返回数据中还没有相关字段
    
        /***
         * 已经处理的任务数
         */
        @SerializedName("num_requests_processed")
        private Integer processedRequests;
    
        /***
         * 服务器负载 1分钟
         */
        private Float load1;
    
        /***
         * 服务器负载 5分钟
         */
        private Float load5;
    
        /***
         * 服务器负载 15分钟
         */
        private Float load15;
    
    
        private Float totalMem;
    
        /***
         * Cached/Shared Memory
         */
        private Float sharedMem;
    
        /***
         * 通过公式计算获得: total-buff-used
         */
        private Float availMem;
    
        private Float usedMem;
    }
    import com.google.gson.Gson;
    import com.netmarch.web.open.ws.ASRServerStatus;
    import org.junit.Test;
    
    public class TestGson {
        @Test
        public void deserial()
        {
            String json ="{"num_workers_available": 9, "num_requests_processed": 61}";
            Gson gson =new Gson();
            ASRServerStatus status = gson.fromJson(json, ASRServerStatus.class);
            System.out.println(status);
        }
    }

    结果:

  • 相关阅读:
    JAVA网络编程-客户端Socket
    JAVA网络编程-URLConnection
    React Native push操作
    Mac电脑输入特殊符号
    iOS sizeForItemAtIndexPath方法在iOS14下变化
    iOS NSDictionary与模型(JSONModel、YYModel)的对比
    iOS UICollectionView实现动态标签(单选、多选)
    iOS Masonry 使用小记(MASConstraint、center、centerX、edges、equalTo、greaterThanOrEqualTo)
    linux上搭建 python虚拟环境
    linux进程和线程查看
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11934157.html
Copyright © 2020-2023  润新知