package com.itsv.comm.json; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import net.sf.hibernate.collection.Set; import com.itsv.comm.test.pojo.User1; /** * * JSON处理类 * @author 死牛崇拜 * */ public class JSONArray { /** * 将LIST转换为json数组 * * @param obj list * * @return 返回JSON格式的数据 */ public static String formArray(Object obj) { String json = "["; Class clss = obj.getClass(); if (clss == ArrayList.class) { json=process(obj,json); } if(clss==Set.class) { json=processSet(obj,json); } return json; } /** * 得理LIST的方法 * @param obj * @param json * @return */ public static String process(Object obj,String json) { List list = (List) obj; for (int j = 0; j < list.size(); j++) { json += "{"; Field[] fields = list.get(j).getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; field.setAccessible(true); try { Object value_obj = field.get(list.get(j)); String value=""; if(value_obj!=null) { value=value_obj.toString(); json += "/"" + field.getName() + "/":/"" +value + "/","; } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } json = json.substring(0, json.length() - 1); json += "},"; } json = json.substring(0, json.length() - 1); json += "]"; return json; } /** * 处理SET集合的方法 * @param obj * @param json * @return */ public static String processSet(Object obj,String json) { Set list = (Set) obj; for (int j = 0; j < list.size(); j++) { json += "{"; Object[] obj_ary=list.toArray(); Field[] fields = obj_ary[j].getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; field.setAccessible(true); try { Object value_obj = field.get(obj_ary[j]); String value=""; if(value_obj!=null) { value=value_obj.toString(); value=value.replaceAll("[//n]",",").replaceAll("//t",""); json += "/"" + field.getName() + "/":/"" +value + "/","; } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } json = json.substring(0, json.length() - 1); json += "},"; } json = json.substring(0, json.length() - 1); json += "]"; return json; } /** * 格式化对像,能将JAVA对像转换成{'name':'张三','id':'1'}这种 JSON格式的数组 * @param obj 需要格式化的目标对象,注意,必须是对象 * @return */ public static String formObject(Object obj) { String json = ""; Class clss = obj.getClass(); json += "{"; Field[] fields = obj.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; field.setAccessible(true); try { Object value_obj = field.get(obj); String value=""; if(value_obj!=null) { value=value_obj.toString(); json += "/"" + field.getName() + "/":/"" +value + "/","; } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } json = json.substring(0, json.length() - 1); json += "},"; json = json.substring(0, json.length() - 1); return json; } /** * 格式化JSON字符串,格式为{'name':'张三','id':'1'},该方法能将JSON字符串转换为JAVA BEAN对象 * @param json JSON字符串 * @param obj 要格式化的JAVA BEAN * @return JAVA BEAN */ public static Object formJSON(String json,Class obj) { Object obj_instance=null; Constructor[] constructors=obj.getDeclaredConstructors(); try { for(int i=0;i<constructors.length;i++) { constructors[i].setAccessible(true); obj_instance=constructors[i].newInstance(new Object[0]); } } catch (IllegalArgumentException e1) { e1.printStackTrace(); } catch (InstantiationException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (InvocationTargetException e1) { e1.printStackTrace(); } json=json.replaceAll("//{","").replaceAll("//}","").replaceAll("//'",""); String[] answer_array=json.split("//,"); for(int i=0;i<answer_array.length;i++) { String []answer_arrayObj=answer_array[i].split("//:"); Field[] fields = obj.getDeclaredFields(); for (int h = 0; h < fields.length; h++) { Field field = fields[h]; field.setAccessible(true); if(answer_arrayObj[0].equals(field.getName().toLowerCase())) try { field.set(obj_instance, answer_arrayObj[1]); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } return obj_instance; } /** * 格式化JSON数组 * @param json JSOB字符串,格式为[{'name':'张三','id':'1'},{'name':'李四','id':'2'}] * @param obj 需要转换的JAVA BEAN * @return 对象 */ public static List formJsonToList(String json,Class obj) { List list=new ArrayList(getStrLength(json)); int index=0; json=json.replaceAll("//[","").replaceAll("//]",""); for(int i=0;i<json.length();i++) { if("{".equals(json.charAt(i)+"")) index=i; if("}".equals(json.charAt(i)+"")) { String jsonarray=json.substring(index,i+1); Object obj_new=formJSON(jsonarray,obj); list.add(obj_new); } } return list; } /** * 得到对像个数 * @param json * @return */ private static int getStrLength(String json) { int count=0; for(int i=0;i<json.length();i++) { if("}".equals(json.charAt(i)+"")) { count++; } } return count; } }