JSON変換汎用クラス


対応するフォーマットをJSONに変換し、対応するフォーマットに変換するための汎用クラス
package net.kangsoft.util.common;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import oracle.sql.CLOB;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 *           json         yyyy-MM-dd
 */
@SuppressWarnings("unchecked")
public class JsonUtils {
 /**
  * @param array
  *                
  * @return String     json   [1,2,3]
  */
 public static String arrayToJson(Object[] array) {
  StringBuilder json = new StringBuilder();
  json.append("[");
  if (array != null && array.length > 0) {
   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) {
  StringBuilder json = new StringBuilder();
  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[i].getName());
     String value = objectToJson(props[i].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[i]
       .getName());
     String value = objectToJsonforbeanToJsonOnly(props[i]
       .getReadMethod().invoke(bean));
     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) {
  StringBuilder json = new StringBuilder();
  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) {
  StringBuilder json = new StringBuilder();
  json.append("{success:true,\"" + key + "\":[");
  if (list != null && list.size() > 0) {
   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) {
  StringBuilder json = new StringBuilder();
  json.append("{");
  if (map != null && map.size() > 0) {
   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) {
  StringBuilder json = new StringBuilder();
  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) {
  StringBuilder json = new StringBuilder();
  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) {
  StringBuilder json = new StringBuilder();
  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) {
  StringBuilder json = new StringBuilder();
  json.append("{");
  if (set != null && set.size() > 0) {
   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[i]);
   jArray.add(jobject);
   jobject.clear();
  }
  return jArray;
 }

 /***
  *     Json   
  * 
  * @param s
  * @return String
  */
 public static String stringToJson(String s) {
  if (s == null) {
   return nullToJson();
  }
  StringBuilder sb = new StringBuilder();
  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 '
': sb.append("\
"); 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("
\t"+key+" ! '" + key + "' Long (public Example(Long id){})

"); // 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[i]; if(os[i] instanceof org.hibernate.lob.SerializableClob) { CLOB c=(CLOB)((org.hibernate.lob.SerializableClob)os[i]).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[i]); List> list=jsonToMap(new String[]{jo.toString().substring(5, jo.toString().length()-2)}); Map om=list.get(0); for(String key : om.keySet()) json.put(key, Common.invokeMethod(os[i], "get"+key.substring(0,1).toUpperCase()+key.substring(1))); i++; } } ja.add(json); } return ja; } }