1. Java到json转换时可通过JsonConfig来控制。
- JSONSerializer.toJSON(javaobj, jsonConfig)=>jsonobj
- //实际方法为:
- json = JSONArray.fromObject( object, jsonConfig );
- json = JSONObject.fromObject( object, jsonConfig );
- setJsonPropertyFilter(PropertyFilter); //设置哪些字段要转
- registerJsonBeanProcessor(class, JsonBeanProcessor);
- registerJsonValueProcessor(class, JsonValueProcessor); //处理Bean对象的属性值的转换
2. json-lib是通过Morpher来jsonstr转换对象,对于不知道类型的转为 MorpherDynBean。
对于复杂的对象想通过Morpher来转就比较困难。可通过jsonConfig 。
- JSONSerializer.toJSON(str, c) => JSONObject或JSONArray
- 再根据如下转成对象
- JSONSerializer.toJava(jsonObject, jsonConfig)=>Object
- //实际方法为:
- JSONObject.toBean(jsonObject, jsonConfig) ==> Object;
- JSONArray.toArray(jsonObject, jsonConfig) ==> Object;
- JSONArray.toList(jsonObject, jsonConfig) ==> List;
- setRootClass(bean.class); // 设置要转成的类,会根据属性的类型来转
- BeanB {BeanA a; BeanA[] as} // 转时会将DynBean转为BeanA
- setClassMap() // {key, class} //key中对应的类
- setArrayMode() //设置JSONArray转成的形式有三种 MODE_OBJECT_ARRAY, MODE_LIST or MODE_SET
- morpherRegistry.registerMorpher( dynaMorpher );
如date:
- JSONUtils.getMorpherRegistry().registerMorpher(
- new DateMorpher(new String[]{ "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd"
- }));
在toBean()时用到Morpher:
- //对象:
- JSONUtils.getMorpherRegistry().registerMorpher(new BeanMorpher( pd.getPropertyType(),JSONUtils.getMorpherRegistry() ) );
- setProperty( root, key, JSONUtils.getMorpherRegistry().morph( pd.getPropertyType(), value ), jsonConfig );
- //数组:
- ObjectArrayMorpher beanMorpher = new ObjectArrayMorpher(
- new BeanMorpher( innerType, JSONUtils.getMorpherRegistry() ) );
- JSONUtils.getMorpherRegistry().registerMorpher( beanMorpher );
- array = JSONUtils.getMorpherRegistry().morph(
- Array.newInstance( innerType, 0 ).getClass(), array );
- setProperty( root, key, array, jsonConfig );