json-lib 之jsonConfig详细使用(转)
一,setCycleDetectionStrategy 防止自包含
/**
* 这里测试如果含有自包含的时候需要CycleDetectionStrategy
*/
public static void testCycleObject() {
CycleObject object = new CycleObject();
object.setMemberId(\"yajuntest\");
object.setSex(\"male\");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
JSONObject json = JSONObject.fromObject(object, jsonConfig);
System.out.println(json);
}
public static void main(String[] args) {
JsonTest.testCycleObject();
}其中 CycleObject.java是我自己写的一个类:
public class CycleObject {
private String memberId;
private String sex;
private CycleObject me = this;
…… // getters && setters
}
二,setExcludes:排除需要序列化成json的属性
public static void testExcludeProperites() {
String str = \"{\'string\':\'JSON\', \'integer\': 1, \'double\': 2.0, \'boolean\': true}\";
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[] { \"double\", \"boolean\" });
JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(str, jsonConfig);
System.out.println(jsonObject.getString(\"string\"));
System.out.println(jsonObject.getInt(\"integer\"));
System.out.println(jsonObject.has(\"double\"));
System.out.println(jsonObject.has(\"boolean\"));
}
public static void main(String[] args) {
JsonTest.testExcludeProperites();
}
三,setIgnoreDefaultExcludes
@SuppressWarnings(\"unchecked\")
public static void testMap() {
Map map = new HashMap();
map.put(\"name\", \"json\");
map.put(\"class\", \"ddd\");
JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(true); //默认为false,即过滤默认的key
JSONObject jsonObject = JSONObject.fromObject(map,config);
System.out.println(jsonObject);
}
上面的代码会把name 和 class都输出。
而去掉setIgnoreDefaultExcludes(true)的话,就只会输出name,不会输出class。
private static final String[] DEFAULT_EXCLUDES = new String[] { \"class\", \"declaringClass\",
\"metaClass\" }; // 默认会过滤的几个key
四,registerJsonBeanProcessor 当value类型是从java的一个bean转化过来的时候,可以提供自定义处理器
public static void testMap() {
Map map = new HashMap();
map.put(\"name\", \"json\");
map.put(\"class\", \"ddd\");
map.put(\"date\", new Date());
JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.registerJsonBeanProcessor(Date.class,
new JsDateJsonBeanProcessor()); // 当输出时间格式时,采用和JS兼容的格式输出
JSONObject jsonObject = JSONObject.fromObject(map, config);
System.out.println(jsonObject);<