json-lib——JsonConfig詳細使用說明


在使用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 }  
JsonDateValueProcessor

  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屬性及集合對象 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM