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