網(wǎng)上都說(shuō)google的gson比阿里的fastjson性能慢鹉动,經(jīng)實(shí)測(cè)試班巩,真實(shí)情況并不是這樣的查近。
以下親測(cè)之:
為了比較的覆蓋性,我們?cè)O(shè)計(jì)了一個(gè)既有普通屬性语卤,也有List,Set,Map及內(nèi)嵌對(duì)象的場(chǎng)景追逮,分別測(cè)試Str->Object及Object->Str
Str to Object
private String fullStrWithQuota = "{\"fieldStr\":\"aa\",\n" +
" \"fieldInt\":100,\n" +
" \"fieldFloat\":13.14,\n" +
" \"fieldBoo\":true,\n" +
" \"fieldList\":[\"a\",\"b\",\"c\"],\n" +
" \"fieldSet\":[\"a\",\"a\",\"b\",\"b\"],\n" +
" \"fieldMap\":{\"k1\":\"v1\",\"k2\":\"v2\"},\n" +
" \"bar\":{\"bfield1\":\"bv1\",\"bfield2\":\"bv2\"}\n" +
"} ";
@Test
public void testStrToObjPerformance(){
Gson gson = new Gson();
long currTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
gson.fromJson(fullStrWithQuota, Foo.class);
}
System.out.println("gson:"+(System.currentTimeMillis() - currTime));
currTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
JSON.parseObject(fullStrWithQuota, Foo.class);
}
System.out.println("fastjson:"+(System.currentTimeMillis() - currTime));
}
兩者分別解析10000次,
得到的測(cè)試結(jié)果是:
- gson374
- fastjson:741
也即fastjson用了741ms
,而gson才用了374ms
,是fastjson的一半時(shí)間粹舵!
此外钮孵,gson的容錯(cuò)性比f(wàn)astjson要好,如將屬性后的,改成;也可以解析成功眼滤,而fastjson是報(bào)錯(cuò)的巴席。
Object to Str
@Test
public void testObjToStrPerformance(){
Gson gson = new Gson();
Foo foo = gson.fromJson(fullStrWithQuota, Foo.class);
long currTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
gson.toJson(foo);
}
System.out.println("gson:"+(System.currentTimeMillis() - currTime));
currTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
JSON.toJSONString(foo);
}
System.out.println("fastjson:"+(System.currentTimeMillis() - currTime));
}
得到的結(jié)果是:
- gson:377
- fastjson:758
結(jié)果也是fastjson是gson的兩倍!
[]
因此初測(cè)的結(jié)論是:不管是字符串轉(zhuǎn)對(duì)象诅需,還是對(duì)象轉(zhuǎn)字符串漾唉,gson的運(yùn)行性能都是fastjson的兩倍,且gson擁有更好的容錯(cuò)性堰塌,兩者都是獨(dú)立的赵刑,不依賴于其它JAR,因此推薦gson!