008_JsonConfig对象
1.?Java轉JSON時忽略被注解標記的字段
1.1.?void addIgnoreFieldAnnotation(Class annotationClass) 添加一個注解類對象, 用于構建的時候忽略被該注解標記的字段(Java-->JSON)。
1.2.?void addIgnoreFieldAnnotation(String annotationClassName) 添加一個注解對象名稱, 用于構建的時候忽略被該注解標記的字段(Java-->JSON)。
1.3.?void removeIgnoreFieldAnnotation(Class annotationClass) 移除一個注解類對象, 當構建的時候不再忽略被該注解標記的字段。
1.4.?void removeIgnoreFieldAnnotation(String annotationClassName) 移除一個注解類對象名稱, 當構建的時候不再忽略被該注解標記的字段。
1.5.?List getIgnoreFieldAnnotations() 獲取構建的時候忽略字段注解列表。
1.6.?代碼
1.6.1. 標記Sensor實體類的getWeightSensor()方法
@Deprecated public Boolean getWeightSensor() {return weightSensor; }1.6.2. 新建一個名為JsonConfig的Java項目, 同時添加相關jar包。
1.6.3. 創建Sensor.java實體類
package com.fj.jc;import java.io.Serializable;/*** 傳感器*/ public class Sensor implements Serializable {private static final long serialVersionUID = 1L;private Boolean weightSensor; // 重力傳感器private Boolean fingerSensor; // 指紋傳感器private String otherSensor; // 其它傳感器public Sensor() {}public Sensor(Boolean weightSensor, Boolean fingerSensor, String otherSensor) {this.weightSensor = weightSensor;this.fingerSensor = fingerSensor;this.otherSensor = otherSensor;}@Deprecatedpublic Boolean getWeightSensor() {return weightSensor;}public void setWeightSensor(Boolean weightSensor) {this.weightSensor = weightSensor;}public Boolean getFingerSensor() {return fingerSensor;}public void setFingerSensor(Boolean fingerSensor) {this.fingerSensor = fingerSensor;}public String getOtherSensor() {return otherSensor;}public void setOtherSensor(String otherSensor) {this.otherSensor = otherSensor;}@Overridepublic String toString() {return "{weightSensor=" + weightSensor + ", fingerSensor=" + fingerSensor + ", otherSensor=" + otherSensor + "}";} }1.6.4. 創建JsonConfigAddIgnoreFieldAnnotation.java, 忽略注解標記字段代碼
package com.fj.jc;import java.util.List; import net.sf.json.JSONObject; import net.sf.json.JsonConfig;/*** 1. void addIgnoreFieldAnnotation(Class annotationClass) 添加一個注解類對象, 用于構建的時候忽略被該注解標記的字段(Java-->JSON)。* 2. void addIgnoreFieldAnnotation(String annotationClassName) 添加一個注解對象名稱, 用于構建的時候忽略被該注解標記的字段(Java-->JSON)。* 3. void removeIgnoreFieldAnnotation(Class annotationClass) 移除一個注解類對象, 當構建的時候不再忽略被該注解標記的字段。* 4. void removeIgnoreFieldAnnotation(String annotationClassName) 移除一個注解類對象名稱, 當構建的時候不再忽略被該注解標記的字段。* 5. List getIgnoreFieldAnnotations() 獲取構建的時候忽略字段注解列表。*/ public class JsonConfigAddIgnoreFieldAnnotation {public static void main(String[] args) {Sensor sensor = new Sensor(true, true, "姿態感應器、色溫傳感器");JsonConfig jsonConfig = new JsonConfig();// 添加一個Deprecated.class注解類對象, 用于構建的時候忽略被該注解標記的字段(Java-->JSON)。jsonConfig.addIgnoreFieldAnnotation(Deprecated.class);// 添加一個java.lang.Deprecated注解對象名稱, 用于構建的時候忽略被該注解標記的字段(Java-->JSON)。 // jsonConfig.addIgnoreFieldAnnotation("java.lang.Deprecated");// 移除Deprecated.class注解類對象, 當構建的時候不再忽略被該注解標記的字段。 // jsonConfig.removeIgnoreFieldAnnotation(Deprecated.class);// 移除java.lang.Deprecated注解類對象名稱, 當構建的時候不再忽略被該注解標記的字段。 // jsonConfig.removeIgnoreFieldAnnotation("java.lang.Deprecated");System.out.println(JSONObject.fromObject(sensor, jsonConfig));// 獲取構建的時候忽略字段注解列表。List<?> list = jsonConfig.getIgnoreFieldAnnotations();for (Object object : list) {System.out.println(object);}} }1.6.5. 創建JsonConfigAddIgnoreFieldAnnotation.java
2.?JSON事件
2.1.?void addJsonEventListener(JsonEventListener listener) 添加一個JSON事件, 事件在使用靜態方法把Java對象轉JSON對象并且事件觸發器開啟的時候被觸發(Java-->JSON)。
2.2.?public void enableEventTriggering() 開啟事件觸發器。
2.3.?public void disableEventTriggering() 關閉事件觸發器。
2.4.?boolean isEventTriggeringEnabled() 事件觸發器是否開啟。
2.5.?public void removeJsonEventListener(JsonEventListener listener) 移除JSON事件。
2.6.?List getJsonEventListeners() 獲取JSON事件列表。
2.7.?void clearJsonEventListeners() 清空JSON事件。
2.8.?Interface JsonEventListener 當構建一個JSONObject對象或者JSONArray數組時, 定義一個協議去處理JsonEvents。
2.8.1.?void onObjectStart() 開始解析一個對象的時候觸發該方法。
2.8.2.?void onPropertySet(String key, Object value, boolean accumulated) 當為JSONObject設置一個屬性的時候觸發該方法。
2.8.3.?void onObjectEnd() 結束解析一個對象的時候觸發該方法。
2.8.4.?void onArrayStart() 開始解析一個數組的時候觸發該方法。
2.8.5.?void onElementAdded(int index, Object element) 給JSONArray添加一個元素的時候觸發該方法。
2.8.6.?void onArrayEnd() 結束解析一個數組的時候觸發該方法。
2.8.7.?void onWarning(String warning) ?當發生一個警告的時候觸發該方法。
2.8.8.?void onError(JSONException jsone) 當拋出一個異常的時候觸發該方法。
2.9.?創建JsonConfigAddJsonEventListener.java
package com.fj.jc;import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONException; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.util.JsonEventListener;/*** 1. void addJsonEventListener(JsonEventListener listener) 添加一個JSON事件, 事件在使用靜態方法把Java對象轉JSON對象并且事件觸發器開啟的時候被觸發(Java-->JSON)。* 2. public void enableEventTriggering() 開啟事件觸發器。* 3. public void disableEventTriggering() 關閉事件觸發器。* 4. boolean isEventTriggeringEnabled() 事件觸發器是否開啟。* 5. public void removeJsonEventListener(JsonEventListener listener) 移除JSON事件。* 6. List getJsonEventListeners() 獲取JSON事件列表。* 7. void clearJsonEventListeners() 清空JSON事件。* * 8. Interface JsonEventListener 當構建一個JSONObject對象或者JSONArray數組時, 定義一個協議去處理JsonEvents。* 8.1. void onObjectStart() 開始解析一個對象的時候觸發該方法。* 8.2. void onPropertySet(String key, Object value, boolean accumulated) 當為JSONObject設置一個屬性的時候觸發該方法。* 8.3. void onObjectEnd() 結束解析一個對象的時候觸發該方法。* 8.4. void onArrayStart() 開始解析一個數組的時候觸發該方法。* 8.5. void onElementAdded(int index, Object element) 給JSONArray添加一個元素的時候觸發該方法。* 8.6. void onArrayEnd() 結束解析一個數組的時候觸發該方法。* 8.7. void onWarning(String warning) 當發生一個警告的時候觸發該方法。 * 8.8. void onError(JSONException jsone) 當拋出一個異常的時候觸發該方法。*/ public class JsonConfigAddJsonEventListener {public static void main(String[] args) {String[] mobileColor = { "亮黑色", "冰霜銀", "零度白", "深海藍", "晨曦金" };Sensor sensor = new Sensor(true, true, "姿態感應器、色溫傳感器");MyJsonEventListener myJsonEventListener = new MyJsonEventListener();JsonConfig jsonConfig = new JsonConfig();jsonConfig.addJsonEventListener(myJsonEventListener); // 添加一個JSON事件jsonConfig.enableEventTriggering(); // 開啟事件觸發器。 // jsonConfig.disableEventTriggering(); // 關閉事件觸發器。System.out.println(jsonConfig.isEventTriggeringEnabled()); // 事件觸發器是否開啟。 // jsonConfig.removeJsonEventListener(myJsonEventListener); // 移除JSON事件。 // jsonConfig.clearJsonEventListeners(); // 清空JSON事件。System.out.println(JSONArray.fromObject(mobileColor, jsonConfig)); // 把Java集合轉為JSONArray對象的時候傳入JSONConfigSystem.out.println(JSONObject.fromObject(sensor, jsonConfig)); // 把Java對象轉為JSONObject對象的時候傳入JSONConfigList<?> list = jsonConfig.getJsonEventListeners(); // 獲取JSON事件列表。for (Object object : list) {System.out.println(object);}} }class MyJsonEventListener implements JsonEventListener {@Overridepublic void onObjectStart() {System.out.println("開始解析一個對象的時候觸發該方法。");}@Overridepublic void onPropertySet(String key, Object value, boolean accumulated) {System.out.println("當為JSONObject設置一個屬性的時候觸發該方法。");}@Overridepublic void onObjectEnd() {System.out.println("結束解析一個對象的時候觸發該方法。");}@Overridepublic void onArrayStart() {System.out.println("開始解析一個數組的時候觸發該方法。");}@Overridepublic void onElementAdded(int index, Object element) {System.out.println("給JSONArray添加一個元素的時候觸發該方法。");}@Overridepublic void onArrayEnd() {System.out.println("結束解析一個數組的時候觸發該方法。");}@Overridepublic void onWarning(String warning) {System.out.println("當發生一個警告的時候觸發該方法。");}@Overridepublic void onError(JSONException jsone) {System.out.println("當拋出一個異常的時候觸發該方法。");} }2.10.?運行JsonConfigAddJsonEventListener.java
3.?默認值處理器(Java-->JSON)
3.1.?public void registerDefaultValueProcessor(Class target, DefaultValueProcessor defaultValueProcessor) 注冊一個默認值處理器(Java-->JSON)。
3.2.?DefaultValueProcessor findDefaultValueProcessor(Class target) 查找目標類的默認值處理器。
3.3.?void unregisterDefaultValueProcessor(Class target) 移除默認值處理器。
3.4.?Interface DefaultValueProcessor 當一個類型為空指針的時候, 定義一個默認值。
3.4.1.?Object getDefaultValue(Class type) 返回一個類型合適的默認值。
3.5.?創建JsonConfigRegisterDefaultValueProcessor.java
package com.fj.jc;import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.DefaultValueProcessor;/*** 1. public void registerDefaultValueProcessor(Class target, DefaultValueProcessor defaultValueProcessor) 注冊一個默認值處理器(Java-->JSON)。* 2. DefaultValueProcessor findDefaultValueProcessor(Class target) 查找目標類的默認值處理器。* 3. void unregisterDefaultValueProcessor(Class target) 移除默認值處理器。* * 4. Interface DefaultValueProcessor 當一個類型為空指針的時候, 定義一個默認值。 * 4.1. Object getDefaultValue(Class type) 返回一個類型合適的默認值。*/ public class JsonConfigRegisterDefaultValueProcessor {public static void main(String[] args) {Sensor sensor = new Sensor(true, true, null);JsonConfig jsonConfig = new JsonConfig();// 注冊一個默認值處理器jsonConfig.registerDefaultValueProcessor(String.class, new DefaultValueProcessor() {@Overridepublic Object getDefaultValue(Class type) {return "mynull";}});// 查找目標類的默認值處理器。DefaultValueProcessor dvp = jsonConfig.findDefaultValueProcessor(String.class);System.out.println(dvp);// 移除默認值處理器。 // jsonConfig.unregisterDefaultValueProcessor(String.class);System.out.println(JSONObject.fromObject(sensor, jsonConfig));} }3.6.?運行JsonConfigRegisterDefaultValueProcessor.java
4.?屬性名處理器(JSON-->Java)
4.1.?void registerJavaPropertyNameProcessor(Class target, PropertyNameProcessor propertyNameProcessor) 注冊某個類的屬性名處理器(JSON-->Java)。
4.2.?PropertyNameProcessor findJavaPropertyNameProcessor(Class beanClass) 查找某個類的屬性名處理器。
4.3.?void unregisterJavaPropertyNameProcessor(Class target) 移除某個類的屬性名處理器。
4.4.?void clearJavaPropertyNameProcessors() 清空所有注冊的屬性名處理器。
4.5.?Interface PropertyNameProcessor 屬性名處理器, 用于Bean的屬性名轉變。
4.5.1.?String processPropertyName(Class beanClass, String name) 處理屬性名
4.6.?創建JsonConfigRegisterJavaPropertyNameProcessor.java
package com.fj.jc;import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.PropertyNameProcessor;/*** 1. void registerJavaPropertyNameProcessor(Class target, PropertyNameProcessor propertyNameProcessor) 注冊某個類的屬性名處理器(JSON-->Java)。* 2. PropertyNameProcessor findJavaPropertyNameProcessor(Class beanClass) 查找某個類的屬性名處理器。* 3. void unregisterJavaPropertyNameProcessor(Class target) 移除某個類的屬性名處理器。* 4. void clearJavaPropertyNameProcessors() 清空所有注冊的屬性名處理器。* * 5. Interface PropertyNameProcessor 屬性名處理器, 用于Bean的屬性名轉變。* 5.1. String processPropertyName(Class beanClass, String name) 處理屬性名*/ public class JsonConfigRegisterJavaPropertyNameProcessor {public static void main(String[] args) {JsonConfig jsonConfig = new JsonConfig();// 注冊Sensor.class類的屬性名處理器jsonConfig.registerJavaPropertyNameProcessor(Sensor.class, new PropertyNameProcessor() {@Overridepublic String processPropertyName(Class beanClass, String name) {if(name.contains("-")) {String[] strArr = name.split("-");if(strArr.length >= 2) {name = strArr[0];for (int i = 1; i < strArr.length; i++) {if(strArr[i].length() > 0) {name += strArr[i].substring(0, 1).toUpperCase() + strArr[i].substring(1);}}}}return name;}});// 查找Sensor.class類的屬性名處理器System.out.println(jsonConfig.findJavaPropertyNameProcessor(Sensor.class));// 移除Sensor.class類的屬性名處理器 // jsonConfig.unregisterJavaPropertyNameProcessor(Sensor.class);// 清空所有注冊的屬性名處理器 // jsonConfig.clearJavaPropertyNameProcessors();String jsonStr = "{\"other-sensor\":\"姿態感應器、色溫傳感器\",\"weight-sensor\":true,\"finger-sensor\":true}";JSONObject jsonObject = JSONObject.fromObject(jsonStr);jsonConfig.setRootClass(Sensor.class);// toBean的時候會調用屬性名處理器, 處理成想要的屬性名Sensor toSensor = (Sensor) JSONObject.toBean(jsonObject, jsonConfig);System.out.println(jsonObject.toString());System.out.println(toSensor);} }4.7.?運行JsonConfigRegisterJavaPropertyNameProcessor.java
5.?屬性名處理器(Java-->JSON)
5.1.?void registerJsonPropertyNameProcessor(Class target, PropertyNameProcessor propertyNameProcessor) 注冊某個類的屬性名處理器(Java-->JSON)。
5.2.?PropertyNameProcessor findJsonPropertyNameProcessor(Class beanClass) 查找某個類的屬性名處理器。
5.3.?void unregisterJsonPropertyNameProcessor(Class target) 移除某個類的屬性名處理器。
5.4.?void clearJsonPropertyNameProcessors() 清空屬性名處理器。
5.5.?創建JsonConfigRegisterJsonPropertyNameProcessor.java
package com.fj.jc;import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.PropertyNameProcessor;/*** 1. void registerJsonPropertyNameProcessor(Class target, PropertyNameProcessor propertyNameProcessor) 注冊某個類的屬性名處理器(Java-->JSON)。* 2. PropertyNameProcessor findJsonPropertyNameProcessor(Class beanClass) 查找某個類的屬性名處理器。* 3. void unregisterJsonPropertyNameProcessor(Class target) 移除某個類的屬性名處理器。* 4. void clearJsonPropertyNameProcessors() 清空屬性名處理器。*/ public class JsonConfigRegisterJsonPropertyNameProcessor {public static void main(String[] args) {Sensor sensor = new Sensor(true, true, "姿態感應器、色溫傳感器");JsonConfig jsonConfig = new JsonConfig();// 注冊Sensor.class類的屬性名處理器(jsonConfig.registerJsonPropertyNameProcessor(Sensor.class, new PropertyNameProcessor() {@Overridepublic String processPropertyName(Class beanClass, String name) {char[] ch = name.toCharArray();for (int i = 0; i < ch.length; i++) {if(65 <= ch[i] && ch[i] <= 90) {if(i == 0) {name = name.substring(0, 1).toLowerCase() + name.substring(1);continue;}name = name.substring(0, i) + "-" + name.substring(i, i+1).toLowerCase() + name.substring(i+1);ch = name.toCharArray();}}return name;}});// 查找Sensor.class類的屬性名處理器System.out.println(jsonConfig.findJsonPropertyNameProcessor(Sensor.class));// 移除Sensor.class類的屬性名處理器 // jsonConfig.unregisterJsonPropertyNameProcessor(Sensor.class);// 清空屬性名處理器 // jsonConfig.clearJsonPropertyNameProcessors();System.out.println(sensor);JSONObject jsonObject = JSONObject.fromObject(sensor, jsonConfig);System.out.println(jsonObject.toString());} }5.6.?運行JsonConfigRegisterJsonPropertyNameProcessor.java
6.?屬性值處理器(Java-->JSON)
6.1.?public void registerJsonValueProcessor(String key, JsonValueProcessor jsonValueProcessor) 注冊一個屬性值處理器(Java-->JSON)。
6.2.?void registerJsonValueProcessor(Class propertyType, JsonValueProcessor jsonValueProcessor) 注冊一個屬性值處理器(Java-->JSON)。
6.3.?public void registerJsonValueProcessor(Class beanClass, String key, JsonValueProcessor jsonValueProcessor) 注冊一個屬性值處理器(Java-->JSON)。
6.4.?void registerJsonValueProcessor(Class beanClass, Class propertyType, JsonValueProcessor jsonValueProcessor) 注冊一個屬性值處理器(Java-->JSON)。
6.5.?JsonValueProcessor findJsonValueProcessor(Class propertyType) 查找一個屬性值處理器。
6.6.?JsonValueProcessor findJsonValueProcessor(Class propertyType, String key) 查找一個屬性值處理器。
6.7.?JsonValueProcessor findJsonValueProcessor(Class beanClass, Class propertyType, String key) 查找一個屬性值處理器。
6.8.?public void unregisterJsonValueProcessor(String key) 移除一個屬性值處理器。
6.9.?public void unregisterJsonValueProcessor(Class propertyType) 移除一個屬性值處理器。
6.10.?public void unregisterJsonValueProcessor(Class beanClass, String key) 移除一個屬性值處理器。
6.11.?public void unregisterJsonValueProcessor(Class beanClass, Class propertyType) 移除一個屬性值處理器。
6.12.?void clearJsonValueProcessors() 清空屬性值處理器。
6.13.?Interface JsonValueProcessor 把屬性值, 處理成合適的值。
6.13.1.?Object processArrayValue(Object value, JsonConfig jsonConfig) 處理數組值, 返回一個合適的值。
6.13.2.?Object processObjectValue(String key, Object value, JsonConfig jsonConfig) 處理鍵關聯的值, 返回一個合適的值。
6.14.?創建JsonConfigRegisterJsonValueProcessor.java
package com.fj.jc;import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor;/*** 1. public void registerJsonValueProcessor(String key, JsonValueProcessor jsonValueProcessor) 按名稱, 注冊一個屬性值處理器(Java-->JSON)。* 2. void registerJsonValueProcessor(Class propertyType, JsonValueProcessor jsonValueProcessor) 按類型, 注冊一個屬性值處理器(Java-->JSON)。* 3. public void registerJsonValueProcessor(Class beanClass, String key, JsonValueProcessor jsonValueProcessor) 按某個Bean的字段類型, 注冊一個屬性值處理器(Java-->JSON)。* 4. void registerJsonValueProcessor(Class beanClass, Class propertyType, JsonValueProcessor jsonValueProcessor) 按某個Bean的字段名稱, 注冊一個屬性值處理器(Java-->JSON)。* 5. JsonValueProcessor findJsonValueProcessor(Class propertyType) 按類型, 查找屬性值處理器。* 6. JsonValueProcessor findJsonValueProcessor(Class propertyType, String key) 按類型和名稱, 查找屬性值處理器。* 7. JsonValueProcessor findJsonValueProcessor(Class beanClass, Class propertyType, String key) 按某個Bean的字段類型, 查找屬性值處理器。* 8. public void unregisterJsonValueProcessor(String key) 按名稱, 移除屬性值處理器。* 9. public void unregisterJsonValueProcessor(Class propertyType) 按類型, 移除屬性值處理器。* 10. public void unregisterJsonValueProcessor(Class beanClass, String key) 按某個Bean的字段名稱, 移除屬性值處理器。* 11. public void unregisterJsonValueProcessor(Class beanClass, Class propertyType) 按某個Bean的字段類型, 移除屬性值處理器。* 12. void clearJsonValueProcessors() 清空屬性值處理器。** 13. Interface JsonValueProcessor 把屬性值, 處理成合適的值。* 13.1. Object processArrayValue(Object value, JsonConfig jsonConfig) 處理數組值, 返回一個合適的值。* 13.2. Object processObjectValue(String key, Object value, JsonConfig jsonConfig) 處理鍵關聯的值, 返回一個合適的值。*/ public class JsonConfigRegisterJsonValueProcessor {public static void main(String[] args) {List<Object> time = new ArrayList<Object>(); time.add(new Date(System.currentTimeMillis())); Sensor sensor = new Sensor(true, true, "");Map<String, Object> mainParam = new HashMap<String, Object>();mainParam.put("mobileMemory", "128GB");mainParam.put("sensor", sensor);mainParam.put("time", time);JsonConfig jsonConfig = new JsonConfig();// 創建屬性名處理器JsonValueProcessor strJVP = new JsonValueProcessor() {// 對象值處理器@Overridepublic Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {System.out.println(key + ":" + value);if(String.class.isAssignableFrom(value.getClass()) && "mobileMemory".equals(key)) {return "256GB";}if(String.class.isAssignableFrom(value.getClass())) {return "姿態感應器、色溫傳感器";}if("fingerSensor".equals(key)) {return false;}return null;}// 數組值處理器@Overridepublic Object processArrayValue(Object value, JsonConfig jsonConfig) {return new SimpleDateFormat("yyyy-MM-dd").format(value);}};jsonConfig.registerJsonValueProcessor("mobileMemory", strJVP); // 按名稱, 注冊一個屬性值處理器jsonConfig.registerJsonValueProcessor(Date.class, strJVP); // 按類型, 注冊一個屬性值處理器jsonConfig.registerJsonValueProcessor(Sensor.class, String.class, strJVP); // 按某個Bean的字段類型, 注冊一個屬性值處理器jsonConfig.registerJsonValueProcessor(Sensor.class, "fingerSensor", strJVP); // 按某個Bean的字段名稱, 注冊一個屬性值處理器System.out.println(JSONObject.fromObject(mainParam, jsonConfig));System.out.println(jsonConfig.findJsonValueProcessor(Date.class)); // 按類型, 查找屬性值處理器System.out.println(jsonConfig.findJsonValueProcessor(null, "mobileMemory")); // 按類型和名稱, 查找屬性值處理器System.out.println(jsonConfig.findJsonValueProcessor(Sensor.class, String.class, null));// 按某個Bean的字段類型, 查找屬性值處理器jsonConfig.unregisterJsonValueProcessor(Date.class); // 按類型, 移除屬性值處理器jsonConfig.unregisterJsonValueProcessor("mobileMemory"); // 按名稱, 移除屬性值處理器jsonConfig.unregisterJsonValueProcessor(Sensor.class, "fingerSensor");// 按某個Bean的字段名稱, 移除屬性值處理器jsonConfig.unregisterJsonValueProcessor(Sensor.class, String.class); // 按某個Bean的字段類型, 移除屬性值處理器jsonConfig.clearJsonBeanProcessors(); // 清空屬性值處理器} }6.15.?運行JsonConfigRegisterJsonValueProcessor.java
7.?bean處理器(Java-->JSON)
7.1.?void registerJsonBeanProcessor(Class target, JsonBeanProcessor jsonBeanProcessor) 注冊一個Bean處理器(Java-->JSON)。
7.2.?JsonBeanProcessor findJsonBeanProcessor(Class target) 查找Bean處理器。
7.3.?void unregisterJsonBeanProcessor(Class target) 移除某個類的Bean處理器。
7.4.?void clearJsonBeanProcessors() 清除所有的Bean處理器。
7.5.?Interface JsonBeanProcessor Bean處理器
7.5.1.?JSONObject processBean(Object bean, JsonConfig jsonConfig) 處理Bean, 返回JSONObject代理。
7.6.?創建JsonConfigRegisterJsonBeanProcessor.java
package com.fj.jc;import java.lang.reflect.InvocationTargetException; import org.apache.commons.beanutils.BeanUtils; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonBeanProcessor;/*** 1. void registerJsonBeanProcessor(Class target, JsonBeanProcessor jsonBeanProcessor) 注冊一個Bean處理器(Java-->JSON)。* 2. JsonBeanProcessor findJsonBeanProcessor(Class target) 查找Bean處理器。* 3. void unregisterJsonBeanProcessor(Class target) 移除某個類的Bean處理器。* 4. void clearJsonBeanProcessors() 清除所有的Bean處理器。* * 5. Interface JsonBeanProcessor Bean處理器* 5.1. JSONObject processBean(Object bean, JsonConfig jsonConfig) 處理Bean, 返回JSONObject代理。*/ public class JsonConfigRegisterJsonBeanProcessor {public static void main(String[] args) {Sensor sensor = new Sensor(true, true, "姿態感應器、色溫傳感器");JsonConfig jsonConfig = new JsonConfig();// 注冊一個Bean處理器jsonConfig.registerJsonBeanProcessor(Sensor.class, new JsonBeanProcessor() {@Overridepublic JSONObject processBean(Object bean, JsonConfig jsonConfig) {Sensor s = (Sensor)bean;s.setWeightSensor(false);JSONObject jsonObject = new JSONObject();try {jsonObject.accumulateAll(BeanUtils.describe(bean));} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {e.printStackTrace();}return jsonObject;}});// 查找Bean處理器System.out.println(jsonConfig.findJsonBeanProcessor(Sensor.class));// 移除Bean處理器 // jsonConfig.unregisterJsonBeanProcessor(Sensor.class);// 清除所有的Bean處理器 // jsonConfig.clearJsonBeanProcessors();System.out.println(JSONObject.fromObject(sensor, jsonConfig));} }7.7.?運行JsonConfigRegisterJsonBeanProcessor.java
8.?屬性去除(Java-->JSON)
8.1.?void registerPropertyExclusion(Class target, String propertyName) 去除某個屬性(Java-->JSON)。
8.2.?void registerPropertyExclusions(Class target, String[] properties) 去除一個或多個屬性(Java-->JSON)。
8.3.?void unregisterPropertyExclusions(Class target) 移除注冊的某個類的去除屬性。
8.4.?void unregisterPropertyExclusion(Class target, String propertyName) 移除注冊的某個類的某個屬性的去除屬性。
8.5.?void clearPropertyExclusions() 清空注冊的所有的去除屬性。
8.6.?創建JsonConfigRegisterPropertyExclusion.java
package com.fj.jc;import net.sf.json.JSONObject; import net.sf.json.JsonConfig;/*** 1. void registerPropertyExclusion(Class target, String propertyName) 去除某個屬性(Java-->JSON)。* 2. void registerPropertyExclusions(Class target, String[] properties) 去除一個或多個屬性(Java-->JSON)。* 3. void unregisterPropertyExclusions(Class target) 移除注冊的某個類的去除屬性。* 4. void unregisterPropertyExclusion(Class target, String propertyName) 移除注冊的某個類的某個屬性的去除屬性。* 5. void clearPropertyExclusions() 清空注冊的所有的去除屬性。*/ public class JsonConfigRegisterPropertyExclusion {public static void main(String[] args) {Sensor sensor = new Sensor(true, true, "姿態感應器、色溫傳感器");JsonConfig jsonConfig = new JsonConfig();// 去除某個屬性 // jsonConfig.registerPropertyExclusion(Sensor.class, "weightSensor");// 去除一個或多個屬性jsonConfig.registerPropertyExclusions(Sensor.class, new String[] {"otherSensor", "fingerSensor"});// 移除注冊的某個類的去除屬性 // jsonConfig.unregisterPropertyExclusions(Sensor.class);// 移除注冊的某個類的某個屬性的去除屬性 // jsonConfig.unregisterPropertyExclusion(Sensor.class, "weightSensor"); // jsonConfig.clearPropertyExclusions(); // 清空注冊的所有的去除屬性System.out.println(JSONObject.fromObject(sensor, jsonConfig));} }8.7.?運行JsonConfigRegisterPropertyExclusion.java
總結
以上是生活随笔為你收集整理的008_JsonConfig对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 006_JSONObject对象公共方法
- 下一篇: 001_Gson概述