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); } }
结果: