json-lib的普及率應該還是比較廣的,不過在spring中倒是傾向於jackson,無奈新專案做到一般才知道jackson,所以還是依舊使用了json-lib~
在序列化的時候,比較常見的問題是資料庫為null的int型字段,被序列化後就賦值成0了,這在有些時候不是我們想看到的結果,那怎麼辦呢?
json-lib提供了jsonconfig物件供我們來自定義一些序列化時的操作:
jsonconfig.registerdefaultvalueprocessor(integer.class,
new defaultvalueprocessor()
});
也就是說,對於需要 序列化的物件的integer的字段來說,只要值為null(也就是integer的預設值),那麼在序列化成json的時候,該key的value則也會為null
我們可以通過以下**測試一下:
public static void main(string args)
});employee employee = new employee();
employee.setname("zhu");
employee.setrole(1);
system.out.println(jsonobject.fromobject(employee));
system.out.println(jsonobject.fromobject(employee, jsonconfig));
}
輸出為:
考慮在序列化的時候我們可能並不想原模原樣的照著 物件 的值來序列化,也許我們想要玩點花樣?比如加個密啊,或者加個格式化的策略
就拿date型別來說吧,如果說按照預設的序列化策略,看看會是什麼結果:
}我想大多數情況下你應該不會是想要這種結果吧?格式化成「yyyy-mm-dd」這種格式也許是最常見的
那麼我們可以通過為date型別的字段配置乙個我們自己的processor:
首先,我們需要實現jsonvalueprocessor介面,這個介面有兩個方法需要實現:
public object processobjectvalue(string paramstring,object paramobject, jsonconfig paramjsonconfig);
public object processarrayvalue(object paramobject,jsonconfig paramjsonconfig);
當物件的某個屬性是該型別時,那麼呼叫processobjectvalue(...)方法來序列化該屬性
而當物件的某個屬性是該型別的陣列或list時,那麼呼叫processarrayvalue(...)方法來序列化該屬性
知道了這個,下面我們就來實現序列化中date型別的格式化吧,這裡對於date的陣列型別就不處理了,直接返回null:
public static void main(string args)
string ret = null;
try catch (exception e)
return ret;
}@override
public object processarrayvalue(object paramobject,
jsonconfig paramjsonconfig)
});employee employee = new employee();
employee.setname("zhu");
employee.setrole(1);
employee.setbirthday(new date());
system.out.println("no jsonconfig:" + jsonobject.fromobject(employee));
system.out.println("with jsonconfig:" + jsonobject.fromobject(employee, jsonconfig));
}
輸出結果是:
no jsonconfig:,"depno":"","empno":"","groupno":0,"name":"zhu","online":0,"phone":"","role":1}
with jsonconfig:
過濾某些不必要序列化的屬性有兩種方式:
1、給定乙個過濾條件,若滿足則被過濾掉2、直接指定需要過濾的屬性名
先來看看第一種:
public static void main(string args)
});employee employee = new employee();
employee.setname("zhu");
employee.setrole(1);
system.out.println("no jsonconfig:" + jsonobject.fromobject(employee));
system.out.println("with jsonconfig:" + jsonobject.fromobject(employee, jsonconfig));
}
輸出結果是:
no jsonconfig:
with jsonconfig:
第二種過濾方式,直接根據屬性的名稱:
public static void main(string args) );
employee employee = new employee();
employee.setname("zhu");
employee.setrole(1);
system.out.println("no jsonconfig:" + jsonobject.fromobject(employee));
system.out.println("with jsonconfig:"
+ jsonobject.fromobject(employee, jsonconfig));
}
可以看到,這裡通過jsonconfig.setexcludes(new string);將double和boolean這兩個屬性
輸出結果:
no jsonconfig:
with jsonconfig:
json lib 解決級聯解析問題
b 問題解釋 b 級聯解析就是類間相互引用,比如說classa中有classb的引用,classb中也有classa的引用,這種情況在hibernate中的雙向關聯會很常見。如果是這種情況,在json lib解析的過程中,會出現net.sf.json.jsonexception there is a...
fastjson和json lib的區別
上次把原生json替換成了fastjson,發生很多地方不相容,對這個也做了一些總結 1 對於沒有賦值的變數處理,json lib會根據型別給出相應初始值,而fastjson直接忽略這個字段。解決方式 轉換時傳入兩個引數 serializerfeature.writemapnullvalue,ser...
如何用JsonLib 來實現EXT中的分頁?
先來看下最後我們要實現的結果是什麼樣?先說說我們傳統上的做法!我們一般會在後台中拼接json格式的字串,然後返回到前台進行解析,那樣雖然能達到目的,但效率上肯定會大打折扣 而今天我們介紹的是專門用來解析json格式的jsonlib,它所需要的jar檔案如下 行,廢話不多說了,上 首先來看前台頁面 e...