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;
	}

	@Deprecated
	public 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;
	}

	@Override
	public 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对象的时候传入JSONConfig
		System.out.println(JSONObject.fromObject(sensor, jsonConfig)); // 把Java对象转为JSONObject对象的时候传入JSONConfig
		
		List<?> list = jsonConfig.getJsonEventListeners(); // 获取JSON事件列表。
		for (Object object : list) {
			System.out.println(object);
		}
	}
}

class MyJsonEventListener implements JsonEventListener {
	@Override
	public void onObjectStart() {
		System.out.println("开始解析一个对象的时候触发该方法。");
	}

	@Override
	public void onPropertySet(String key, Object value, boolean accumulated) {
		System.out.println("当为JSONObject设置一个属性的时候触发该方法。");
	}

	@Override
	public void onObjectEnd() {
		System.out.println("结束解析一个对象的时候触发该方法。");
	}

	@Override
	public void onArrayStart() {
		System.out.println("开始解析一个数组的时候触发该方法。");
	}

	@Override
	public void onElementAdded(int index, Object element) {
		System.out.println("给JSONArray添加一个元素的时候触发该方法。");
	}

	@Override
	public void onArrayEnd() {
		System.out.println("结束解析一个数组的时候触发该方法。");
	}

	@Override
	public void onWarning(String warning) {
		System.out.println("当发生一个警告的时候触发该方法。");
	}

	@Override
	public 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() {
			@Override
			public 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() {
			@Override
			public 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() {
			@Override
			public 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() {
			// 对象值处理器
			@Override
			public 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;
			}
			
			// 数组值处理器
			@Override
			public 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() {
			@Override
			public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值