//data為頁面JSON格式的對象資料
BaseInfoPojo jsonBaseInfoPojo = (BaseInfoPojo) JsonUtil.getDTO(data,
BaseInfoPojo.class);
public class JsonUtil {
/**
* 從一個JSON 對象字元格式設定中得到一個java對象,形如:
* @param jsonString json字元
* @param clazz 轉換java對象的class
* @return 返回java對象
*/
public static Object getDTO(String jsonString, Class clazz){
JSONObject jsonObject = null;
setDataFormat2JAVA();
jsonObject = JSONObject.fromObject(jsonString);
return JSONObject.toBean(jsonObject, clazz);
}
/**
* 從一個JSON 對象字元格式設定中得到一個java對象,其中beansList是一類的集合,形如:
* {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},
* beansList:[{}, {}, ...]}
* @param jsonString json字元
* @param clazz 轉換java對象的class
* @param map 屬�?的類�?(key : 屬�?�? value : 屬�?類型class,如果該屬性是集合,則是集合中對象的屬�?類型) eg: ("beansList" : Bean.class)
* @return 返回java對象
*/
public static Object getDTO(String jsonString, Class clazz, Map map){
JSONObject jsonObject = null;
setDataFormat2JAVA();
jsonObject = JSONObject.fromObject(jsonString);
return JSONObject.toBean(jsonObject, clazz, map);
}
/**
* 從一個JSON數組得到�?��java對象數組,形如:
* [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
* @param jsonString json字元�?
* @param clazz 轉換java對象的class
* @return java對象數組
*/
public static Object[] getDTOArray(String jsonString, Class clazz){
setDataFormat2JAVA();
JSONArray array = JSONArray.fromObject(jsonString);
Object[] obj = new Object[array.size()];
for(int i = 0; i < array.size(); i++){
JSONObject jsonObject = array.getJSONObject(i);
obj[i] = JSONObject.toBean(jsonObject, clazz);
}
return obj;
}
/**
* 從一個JSON數組得到�?��java對象數組,形如:
* [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
* @param jsonString json字元�?
* @param clazz 轉換java對象的class
* @param map 屬�?的類�?(key : 屬�?�? value : 屬�?類型class,如果該屬性是集合,則是集合中對象的屬�?類型)
* @return java對象數組
*/
public static Object[] getDTOArray(String jsonString, Class clazz, Map map){
setDataFormat2JAVA();
JSONArray array = JSONArray.fromObject(jsonString);
Object[] obj = new Object[array.size()];
for(int i = 0; i < array.size(); i++){
JSONObject jsonObject = array.getJSONObject(i);
obj[i] = JSONObject.toBean(jsonObject, clazz, map);
}
return obj;
}
/**
* 從一個JSON數組得到�?��java對象集合
* @param jsonString json字元�?
* @param clazz 轉換java對象的class
* @return 包含java對象的list
*/
public static List getDTOList(String jsonString, Class clazz){
setDataFormat2JAVA();
JSONArray array = JSONArray.fromObject(jsonString);
List list = new ArrayList();
for(Iterator iter = array.iterator(); iter.hasNext();){
JSONObject jsonObject = (JSONObject)iter.next();
list.add(JSONObject.toBean(jsonObject, clazz));
}
return list;
}
/**
* 從一個JSON數組得到�?��java對象集合,其中對象中包含有集合屬�?
* @param jsonString json字元�?
* @param clazz 轉換java對象的class
* @param map 屬�?的類�?(key : 屬�?�? value : 屬�?類型class,如果該屬性是集合,則是集合中對象的屬�?類型)
* @return 包含java對象的list
*/
public static List getDTOList(String jsonString, Class clazz, Map map){
setDataFormat2JAVA();
JSONArray array = JSONArray.fromObject(jsonString);
List list = new ArrayList();
for(Iterator iter = array.iterator(); iter.hasNext();){
JSONObject jsonObject = (JSONObject)iter.next();
list.add(JSONObject.toBean(jsonObject, clazz, map));
}
return list;
}
/**
* 從json HASH運算式中擷取對應的map,該map支援嵌套功能
* 形如:{"id" : "johncon", "name" : "小強"}
* 注意commons-collections版本,必須包含org.apache.commons.collections.map.MultiKeyMap
* @param jsonString json字元�?
* @return 返回java.util.Map
*/
public static Map getMapFromJson(String jsonString) {
setDataFormat2JAVA();
JSONObject jsonObject = JSONObject.fromObject(jsonString);
Map map = new HashMap();
for(Iterator iter = jsonObject.keys(); iter.hasNext();){
String key = (String)iter.next();
map.put(key, jsonObject.get(key));
}
return map;
}
/**
* 從json數組中得到相應java數組 (json中是java基本的資料物件類型
* json形如:["123", "456"]
* @param jsonString json字串
* @return 基本資料對象數組
*/
public static Object[] getObjectArrayFromJson(String jsonString) {
setDataFormat2JAVA();
JSONArray jsonArray = JSONArray.fromObject(jsonString);
return jsonArray.toArray();
}
/**
* 把資料對象轉換成json字串
* DTO對象形如:{"id" : idValue, "name" : nameValue, ...}
* 數組對象形如:[{}, {}, {}, ...]
* map對象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}
* @param object java的任何對象
* @return json格式字串
*/
public static String getJSONString(Object object) throws Exception{
String jsonString = null;
try{
//日期值處理器
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
if(object != null){
if(object instanceof Collection || object instanceof Object[]){
jsonString = JSONArray.fromObject(object,jsonConfig).toString();
}else if(object instanceof String||object instanceof Integer
||object instanceof Boolean||object instanceof Double||object instanceof Float){
jsonString="{"+object.toString()+"}";
}else{
jsonString = JSONObject.fromObject(object,jsonConfig).toString();
}
}
}catch(Exception e){
e.printStackTrace();
}
return jsonString == null ? "{}" : jsonString;
}
private static void setDataFormat2JAVA(){
//設定日期轉換格式
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
}
public static void main(String[] arg) throws Exception{
List list =new ArrayList();
for (int i = 0; i < 10; i++) {
// Map map=new HashMap();
// map.put("za", "a");
// list.add(map);
Map map =new HashMap();
map.put("a", "a");
map.put("b", new Date());
list.add(map);
}
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
Map map1=getMapFromJson("{\"b\":\"2011-05-30 22:18:35\",\"a\":\"a\"}");
System.out.println(JSONObject.fromObject(new Date(), jsonConfig).toString());
// Map m=new HashMap();
// m.put("b", B.class);
// m.put("map", Map.class);
//System.out.println(" object : " + JSONArray.fromObject(list).toString());
// A a=new A();
// System.out.println(" object : " + JsonUtil.getJSONString(list));
// List list11=getDTOList(JsonUtil.getJSONString(list),Map.class);
// System.out.println(" object : " + list11.get(0));
// List list1=JsonUtil.getDTOList(JsonUtil.getJSONString(list),A.class,m);
// for (Iterator iterator = list1.iterator(); iterator.hasNext();) {
// A a = (A) iterator.next();
// System.out.print(a.getName()+",");
// List list2 = a.getB();
// for (Iterator iterator2 = list2.iterator(); iterator2.hasNext();) {
// B b = (B) iterator2.next();
// System.out.print(b.getAbc()+",");
// System.out.print(b.getMap().get("bs")+",");
// }
// Map ma=a.getMap();
// System.out.println(ma.get("as").toString());
//
// }
// System.out.println("aa");
// A a = (A) Class.forName("com.ibm.crl.idop.util.A").newInstance();
}
}