JSONObject的過濾設定
在使用json-lib包中JSONObject.fromObject(bean,cfg)時,可能出現以下幾種情況:
1、(防止自包含)轉換的物件包含自身物件,或者物件A下面掛了物件B,物件B下面又掛了物件A,如果不設定取消環形結構,則那麼會拋異常:“There is a cycle in the hierarchy!”
解決方法:
在呼叫JSONObject.fromObject(bean,cfg)時,自定義JsonConfig:
JsonConfig cfg = new JsonConfig();
cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
然後將cfg物件傳入fromObject方法中,這樣,物件B下面掛的物件A就會被置為NULL。
2、(Date型別轉化)JavaBean出現Date格式時,轉化成json時會出現將其轉化為:{“date”:6,“day”:3,“hours”:21,“minutes”:26,“month”:0,“nanos”:290000000,“seconds”:31,“time”:1452086791290,“timezoneOffset”:-480,“year”:116},這個不易處理,如果需要將Date轉換為我們認識的“yyyy-MM-dd”格式,則需要自行建立時間轉換器,並實現json-lib中的JsonValueProcessor介面,實現該介面中的兩個方法(processArrayValue和processObjectValue):
1 public class JsonDateValueProcessor implements JsonValueProcessor {
2 private String format ="yyyy-MM-dd";
3
4 public JsonDateValueProcessor() {
5 super();
6 }
7
8 public JsonDateValueProcessor(String format) {
9 super();
10 this.format = format;
11 }
12
13 @Override
14 public Object processArrayValue(Object paramObject,
15 JsonConfig paramJsonConfig) {
16 return process(paramObject);
17 }
18
19 @Override
20 public Object processObjectValue(String paramString, Object paramObject,
21 JsonConfig paramJsonConfig) {
22 return process(paramObject);
23 }
24
25
26 private Object process(Object value){
27 if(value instanceof Date){
28 SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
29 return sdf.format(value);
30 }
31 return value == null ? "" : value.toString();
32 }
33
34 }
cfg.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
這樣,物件下面如果有Date型別,轉化出來變為“yyyy-MM-dd”格式。
3、(欄位過濾)如果需要在轉化過程中去除某些欄位,則需要定義一些Excludes欄位,具體使用如下:
String[] EXCLUDES = new String[]{"A","B","C"};
cfg.setExcludes(EXCLUDES);
這樣,物件轉化時,“A”,“B”,"C"會被去除,物件中這些欄位轉成json時會被刪除。
4、(過濾器PropertyFilter使用)和3有點類似,但是PropertyFilter作用是為了過濾某些符合一些指定條件的屬性,如:
cfg.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return value == null;//value為null時返回true,返回true的就是需要過濾調的
}
});
這樣,物件轉化出來後,生成的 json 字串只包含非空的值。
5、其餘的常見用法:
- cfg.setIgnoreDefaultExcludes(true); //預設為false,即過濾預設的key,改為true則不忽略
- cfg.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true)); //
忽略掉集合物件 - cfg.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true, new
String[]{“name”})); // 忽略掉name屬性及集合物件 - 其他參考資料:https://www.cnblogs.com/benpaobawoniu/p/6607550.html
- 寫的不錯程式碼:https://www.cnblogs.com/az19870227/archive/2011/09/19/2180993.html
相關文章
- 直播帶貨原始碼,android editText設定顏文字過濾原始碼Android
- Vue定義全域性過濾器filterVue過濾器Filter
- Laravel 模型過濾(Filter)設計Laravel模型Filter
- JSONObject.parseObject 、JSONObject.toJSONStringJSONObject
- 4、過濾器的使用及自定義過濾器過濾器
- Java設計模式-過濾器模式Java設計模式過濾器
- .Net MVC中定義全域性過濾器及在Action中排除全域性過濾器MVC過濾器
- 品味布隆過濾器的設計之美過濾器
- 過濾
- 極簡設計模式-過濾器模式設計模式過濾器
- 誠翔濾器光刻膠過濾器濾芯:保障光刻過程的高效與安全過濾器
- 過濾器過濾器
- filter過濾Filter
- 過濾FilteringFilter
- Filter過濾器的使用Filter過濾器
- Spring Cloud Gateway中的過濾器工廠:重試過濾器SpringCloudGateway過濾器
- PbootCMS設定當前站點模板,模板子目錄,黑白名單,敏感詞過濾等boot
- Django(67)drf搜尋過濾和排序過濾Django排序
- 13.gateway中的過濾器的介紹以及自定義過濾器Gateway過濾器
- CAN過濾器過濾器
- 檢視過濾
- Filter過濾器Filter過濾器
- vue 過濾器Vue過濾器
- 過濾函式函式
- NetCore過濾器NetCore過濾器
- 代理過濾器過濾器
- Vue過濾器Vue過濾器
- winshark 過濾包
- vue 列表過濾Vue
- DataV過濾器過濾器
- hbase過濾器過濾器
- Qt事件過濾器的使用QT事件過濾器
- Wireshark的捕獲過濾器過濾器
- 3、Oracle 中的過濾、排序Oracle排序
- Guava的布隆過濾器Guava過濾器
- 簡單的限流過濾器過濾器
- 理解Maven Resource的過濾功能Maven
- [20210802]grep奇怪的過濾.txt