huqingyong_eye 发表于 2013-1-19 04:14:38

JSON解析

package com.nci.nportal.webservice.allinterface.cisinterface;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.json.JSONArray;import net.sf.json.JSONObject;/** * 将任意格式的数据转为json数据 日期转换问题yyyy-MM-dd */public class JsonUtils {/** * @param array *            对象数组 * @return String 返回部分json字符串 */public static String arrayToJson(Object[] array) {StringBuffer json = new StringBuffer();json.append("[");if (array != null && array.length > 0) {for(int m=0;m<array.length;m++){Object obj = array;json.append(objectToJson(obj));json.append(",");}//jdk1.5如下操作//for (Object obj : array) {//json.append(objectToJson(obj));//json.append(",");//}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();}/** * javabean转换成Json字符串 ** @param bean *            bean对象 * @return String 返回整个json字符串{a:'a',b:'b'} */public static String beanToJson(Object bean) {StringBuffer json = new StringBuffer();json.append("{");PropertyDescriptor[] props = null;try {props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();} catch (IntrospectionException e) {}if (props != null) {for (int i = 0; i < props.length; i++) {try {String name = objectToJson(props.getName());String value = objectToJson(props.getReadMethod().invoke(bean, null));//String value = objectToJson((props.getReadMethod()).invoke(bean));json.append(name);json.append(":");json.append(value);json.append(",");} catch (Exception e) {}}json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}/** * beanToJsonOnly 获取单条用户信息专用 ** @param bean *            bean对象 * @return String */public static String beanToJsonOnly(String root, Object bean) {JSONArray jArray = new JSONArray();JSONObject jObject = new JSONObject();JSONObject jsoObject = new JSONObject();PropertyDescriptor[] props = null;try {props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();} catch (IntrospectionException e) {}if (props != null) {for (int i = 0; i < props.length; i++) {try {String name = objectToJsonforbeanToJsonOnly(props.getName());//String value = objectToJsonforbeanToJsonOnly(props.getReadMethod().invoke(bean));String value = objectToJsonforbeanToJsonOnly(props.getReadMethod().invoke(bean, null));jObject.put(name, value);} catch (Exception e) {}}jArray.add(jObject);jsoObject.put(root, jArray);} else {}return jsoObject.toString();}/*************************************************************************** * bool转换Json字符串 ** @param bool * @return */public static String booleanToJson(Boolean bool) {return bool.toString();}/*************************************************************************** * 日期转换成"yyyy-MM-dd HH:mm:ss"形式的字符串 ** @param date * @return */public static String date18ToJson(java.util.Date date) {String dateFormatString = "";SimpleDateFormat sdf = null;sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");dateFormatString = sdf.format(date);return dateFormatString;}/** * 方法说明:用于分页 ** @param rootKey *            对应JsonReader.root的key * @param rootData *            单个页面要显示的数据 * @param totalKey *            对应JsonReader.totalProperty的key * @param totalCount *            所有记录的条数 * @return *///public static String pageListToJson(String rootKey, List rootData,//String totalKey, long totalCount) {//StringBuffer json = new StringBuffer();//json.append("{\"" + rootKey + "\":[");//if (rootData != null && rootData.size() > 0) {//for (Object obj : rootData) {//json.append(objectToJson(obj));//json.append(",");//}//json.setCharAt(json.length() - 1, ']');//} else {//json.append("]");//}//json.append(",\"" + totalKey + "\":" + totalCount);//json.append("}");//return json.toString();//}/** * 显示所有数据 ** @param key * @param list * @return */public static String listToJson(String key, List list) {StringBuffer json = new StringBuffer();json.append("{success:true,\"" + key + "\":[");if (list != null && list.size() > 0) {for(int m=0;m<list.size();m++){Object obj = list.get(m);json.append(objectToJson(obj));json.append(",");}//JDK1.5的做法如下//for (Object obj : list) {//json.append(objectToJson(obj));//json.append(",");//}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}json.append("}");return json.toString();}/** * @param map *            map对象 * @return String */public static String mapToJson(Map map) {StringBuffer json = new StringBuffer();json.append("{");if (map != null && map.size() > 0) {for(int m=0;m<map.keySet().size(); m++){Set key = map.keySet();Iterator it = key.iterator();while(it.hasNext()) {json.append(objectToJson(key));json.append(":");json.append(objectToJson(map.get(key)));json.append(",");}}//jdk1.5做法如下//for (Object key : map.keySet()) {//json.append(objectToJson(key));//json.append(":");//json.append(objectToJson(map.get(key)));//json.append(",");//}json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}/** * 从map到json转换后如:map[('a','avalue'),('b','bvalue')]->[{key_json:'a',value_json:'avalue'},{key_json:'b',value_json:'bvalue'}] ** @param map * @param key_json *            键转成json后对应json键 * @param value_json *            值转成json后对应json键 * @return *///public static String mapToJson(Map map, String key_json,//String value_json) {//StringBuffer json = new StringBuffer();//json.append("[");//if (map != null && map.size() > 0) {//for (Object key : map.keySet()) {//json.append("{" + key_json + ":" + objectToJson(key));//json.append(",");//json.append(value_json + ":" + objectToJson(map.get(key)));//json.append("}");//}//} else {//json.append("]");//}//return json.toString();//}/*************************************************************************** * null转换Json字符串 ** @return 空字符串 */public static String nullToJson() {return "";}/*************************************************************************** * 数字转换成Json字符串 ** @param number * @return */public static String numberToJson(Number number) {if (number.toString().equals("0") || number.toString().equals("0.0")) {return "\"\"";}return number.toString();}/*************************************************************************** * 对象转换Json字符串 ** @param obj * @return */public static String objectToJson(Object obj) {StringBuffer json = new StringBuffer();if (obj == null) {json.append("\"\"");} else if (obj instanceof Number) {json.append(numberToJson((Number) obj));} else if (obj instanceof Boolean) {json.append(booleanToJson((Boolean) obj));} else if (obj instanceof String) {json.append("\"").append(stringToJson(obj.toString())).append("\"");} else if (obj instanceof Object[]) {json.append(arrayToJson((Object[]) obj));} else if (obj instanceof List) {json.append(listToJson(null, (List) obj));} else if (obj instanceof Map) {json.append(mapToJson((Map) obj));} else if (obj instanceof Set) {json.append(setToJson((Set) obj));} else if (obj instanceof Date) {json.append("\"").append(date18ToJson((Date) obj)).append("\"");} else {json.append(beanToJson(obj));}return json.toString();}/** * beanToJsonOnly 专用 ** @param obj * @return */public static String objectToJsonforbeanToJsonOnly(Object obj) {StringBuffer json = new StringBuffer();if (obj == null) {json.append("");} else if (obj instanceof Number) {json.append(numberToJson((Number) obj));} else if (obj instanceof Boolean) {json.append(booleanToJson((Boolean) obj));} else if (obj instanceof String) {json.append("").append(stringToJson(obj.toString())).append("");} else if (obj instanceof Object[]) {json.append(arrayToJson((Object[]) obj));} else if (obj instanceof List) {json.append(listToJson(null, (List) obj));} else if (obj instanceof Map) {json.append(mapToJson((Map) obj));} else if (obj instanceof Set) {json.append(setToJson((Set) obj));} else if (obj instanceof Date) {json.append("").append(date18ToJson((Date) obj)).append("");} else {json.append(beanToJsonOnly(null, obj));}return json.toString();}/** * @param set *            集合对象 * @return String */public static String setToJson(Set set) {StringBuffer json = new StringBuffer();json.append("{");if (set != null && set.size() > 0) {Iterator it = set.iterator();while(it.hasNext()) {json.append(objectToJson(it.next()));json.append(",");}//jdk1.5做法如下//for (Object obj : set) {//json.append(objectToJson(obj));//json.append(",");//}//json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}/*************************************************************************** * 从一个json格式的字符串数组来得到json数组 ** @param jStrings * @return */public static JSONArray stringArrayToJSONArray(String[] jStrings) {JSONArray jArray = new JSONArray();JSONObject jobject = null;for (int i = 0; i < jStrings.length; i++) {jobject = JSONObject.fromObject(jStrings);jArray.add(jobject);jobject.clear();}return jArray;}/*************************************************************************** * 字符转换Json字符串 ** @param s * @return String */public static String stringToJson(String s) {if (s == null) {return nullToJson();}StringBuffer sb = new StringBuffer();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);switch (ch) {case '"':sb.append("\\\"");break;case '\\':sb.append("\\\\");break;case '\b':sb.append("\\b");break;case '\f':sb.append("\\f");break;case '\n':sb.append("\\n");break;case '\r':sb.append("\\r");break;case '\t':sb.append("\\t");break;case '/':sb.append("\\/");break;default:if (ch >= '\u0000' && ch <= '\u001F') {String ss = Integer.toHexString(ch);sb.append("\\u");for (int k = 0; k < 4 - ss.length(); k++) {sb.append('0');}sb.append(ss.toUpperCase());} else {sb.append(ch);}}}return sb.toString();}/** * 从json转换成指定的类型 集合 ** @param c *            ->要转换到的类型 * @param values *            ->前台来的json格式字符串数组,数组中每个元素是一个对象的属性集合如{"id":"2","name":"zhangsan"} * @return c的集合 *///public static List jsonToList(Class c, String[] values) {//List list = new ArrayList();//try {//for (String ejson : values) {//if (Common.isEmpty(ejson))//continue;//ejson = ejson.substring(ejson.indexOf("{") + 1);//ejson = (ejson.lastIndexOf("}") == -1) ? ejson : ejson//.substring(0, ejson.lastIndexOf("}"));//String[] os = ejson.split(",\"");//Object o = c.getConstructor().newInstance();//for (String key : os) {//Class filedClass = null;// 属性所属的类型//try {//String field = key.substring(0, key.indexOf(":"));// 属性名//if (0 == field.indexOf("\""))//field = field.substring(field.indexOf("\"") + 1);// 去前双引号(如果有)//field = (field.lastIndexOf("\"") == -1) ? field : field//.substring(0, field.lastIndexOf("\""));// 去后双引号(如果有)//String fieldValue = key.substring(key.indexOf(":") + 1);// 属性值//if (fieldValue.indexOf("\"") == 0)//fieldValue = fieldValue.substring(fieldValue//.indexOf("\"") + 1);//fieldValue = (fieldValue.lastIndexOf("\"") == -1) ? fieldValue//: fieldValue.substring(0, fieldValue//.lastIndexOf("\""));//Common.setFieldValue(fieldValue, field, o);//} catch (Exception e) {//System.err//.println("\n\t"//+ key//+ "这个属性在指定的类中不存在或值类型不正确!或外键类变量'"//+ key//+ "'必须有一个Long型参数的构造方法(public Example(Long id){})\n\n");//// e.printStackTrace();////}//}//list.add(o);//}//} catch (Exception e) {//e.printStackTrace();//}////return list;//}/** * 从json转换成指定的类型 集合 ** @param values *            ->前台来的json格式字符串数组,数组中每个元素是一个对象的属性集合如{"id":"2","name":"zhangsan"} * @return c的集合 *///public static List jsonToMap(String[] values) {//List list = new ArrayList();//try {//for (String ejson : values) {//Map valueMap = new HashMap();//if (Common.isEmpty(ejson))//continue;//ejson = ejson.substring(ejson.indexOf("{") + 1);//ejson = (ejson.lastIndexOf("}") == -1) ? ejson : ejson//.substring(0, ejson.lastIndexOf("}"));//String[] os = ejson.split(",");//for (String key : os) {//if (Common.isEmpty(key))//continue;//try {//String field = key.substring(0, key.indexOf(":"));// 属性名//field = field.substring(field.indexOf("\"") + 1);// 去前双引号(如果有)//field = (field.lastIndexOf("\"") == -1) ? field : field//.substring(0, field.lastIndexOf("\""));// 去后双引号(如果有)//String fieldValue = key.substring(key.indexOf(":") + 1);// 属性值//fieldValue = fieldValue.substring(fieldValue//.indexOf("\"") + 1);//fieldValue = (fieldValue.lastIndexOf("\"") == -1) ? fieldValue//: fieldValue.substring(0, fieldValue//.lastIndexOf("\""));//valueMap.put(field.trim(), fieldValue.trim());//} catch (Exception e) {//// e.printStackTrace();//}//}//list.add(valueMap);//}//} catch (Exception e) {//e.printStackTrace();//}////return list;//}/** * 将传入的集合转换成jsonArray ** @param values *            集合数据,可以是对象 * @param keys *            键,如果是对象传对象的class如:['name',User.class,'gender'] * @return * @throws SqlOperationException *///public static JSONArray listToJsonArray(List values, Object[] keys){//if (values == null || values.size() == 0)//return new JSONArray();//JSONArray ja = new JSONArray();//for (Object value : values) {//Object[] os = null;//if (value instanceof Object[])//os = (Object[]) value;//else//os = new Object[] { value };//JSONObject json = new JSONObject();//int i = 0;//for (Object o : keys) {//if (!(o instanceof Class)) {//Object resultStr = os;//if (os instanceof org.hibernate.lob.SerializableClob) {//CLOB c = (CLOB) ((org.hibernate.lob.SerializableClob) os)//.getWrappedClob();//try {//resultStr = c.getSubString(1, (int) c.length());//} catch (SQLException e) {////}//}//json.put(o.toString().trim(), (resultStr == null) ? ""//: resultStr.toString().trim());//i++;//} else {//JSONObject jo = new JSONObject();//jo.put("o", os);//List list = jsonToMap(new String[] { jo.toString()//.substring(5, jo.toString().length() - 2) });//Map om = (Map) list.get(0);//for (String key : om.keySet())//json.put(key, Common.invokeMethod(os, "get"//+ key.substring(0, 1).toUpperCase()//+ key.substring(1)));//i++;//}//}//ja.add(json);//}//return ja;//}}
页: [1]
查看完整版本: JSON解析