JSON工具類 – JAVA編程語言程序開發技術文章

Java代碼 
/**
 
  * Copyright (c) linkwise 2007-2009 corporation.
 
  * All rights reserved
 
  */ 
 
  package com.linghui.common.util; 
 
  import java.util.ArrayList; 
 
  import java.util.Date; 
 
  import java.util.HashMap; 
 
  import java.util.Iterator; 
 
  import java.util.List; 
 
  import java.util.Map; 
 
  import net.sf.json.JSONArray; 
 
  import net.sf.json.JSONObject; 
 
  import net.sf.json.JsonConfig; 
 
  import net.sf.json.util.CycleDetectionStrategy; 
 
  import com.linghui.common.util.DateUtil; 
 
  import com.linghui.common.util.jsonutil.DateJsonValueProcessor; 
 
  /**
 
  *
 
  */ 
 
  public class JsonUtil { 
 
  /**
 
  * 從一個JSON 對象字符格式中得到一個java對象
 
  * @param jsonString
 
  * @param pojoCalss
 
  * @return
 
  */ 
 
  public static Object getObject4JsonString(String jsonString,Class pojoCalss){ 
 
  Object pojo; 
 
  JSONObject jsonObject = JSONObject.fromObject( jsonString ); 
 
  pojo = JSONObject.toBean(jsonObject,pojoCalss); 
 
  return pojo; 
 
  } 
 
  /**
 
  * 從json HASH表達式中獲取一個map,改map支持嵌套功能
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static Map getMap4Json(String jsonString){ 
 
  JSONObject jsonObject = JSONObject.fromObject( jsonString ); 
 
  Iterator keyIter = jsonObject.keys(); 
 
  String key; 
 
  Object value; 
 
  Map valueMap = new HashMap(); 
 
  while( keyIter.hasNext()) 
 
  { 
 
  key = (String)keyIter.next(); 
 
  value = jsonObject.get(key); 
 
  valueMap.put(key, value); 
 
  } 
 
  return valueMap; 
 
  } 
 
  /**
 
  * 從json數組中得到相應java數組
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static Object[] getObjectArray4Json(String jsonString){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  return jsonArray.toArray(); 
 
  } 
 
  /**
 
  * 從json對象集合表達式中得到一個java對象列表
 
  * @param jsonString
 
  * @param pojoClass
 
  * @return
 
  */ 
 
  public static List getList4Json(String jsonString, Class pojoClass){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  JSONObject jsonObject; 
 
  Object pojoValue; 
 
  List list = new ArrayList(); 
 
  for ( int i = 0 ; i<jsonArray.size(); i++){ 
 
  jsonObject = jsonArray.getJSONObject(i); 
 
  pojoValue = JSONObject.toBean(jsonObject,pojoClass); 
 
  list.add(pojoValue); 
 
  } 
 
  return list; 
 
  } 
 
  /**
 
  * 從json數組中解析出java字符串數組
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static String[] getStringArray4Json(String jsonString){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  String[] stringArray = new String[jsonArray.size()]; 
 
  for( int i = 0 ; i<jsonArray.size() ; i++ ){ 
 
  stringArray[i] = jsonArray.getString(i); 
 
  } 
 
  return stringArray; 
 
  } 
 
  /**
 
  * 從json數組中解析出javaLong型對象數組
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static Long[] getLongArray4Json(String jsonString){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  Long[] longArray = new Long[jsonArray.size()]; 
 
  for( int i = 0 ; i<jsonArray.size() ; i++ ){ 
 
  longArray[i] = jsonArray.getLong(i); 
 
  } 
 
  return longArray; 
 
  } 
 
  /**
 
  * 從json數組中解析出java Integer型對象數組
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static Integer[] getIntegerArray4Json(String jsonString){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  Integer[] integerArray = new Integer[jsonArray.size()]; 
 
  for( int i = 0 ; i<jsonArray.size() ; i++ ){ 
 
  integerArray[i] = jsonArray.getInt(i); 
 
  } 
 
  return integerArray; 
 
  } 
 
  /**
 
  * 從json數組中解析出java Date 型對象數組,使用本方法必須保證
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static Date[] getDateArray4Json(String jsonString,String DataFormat){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  Date[] dateArray = new Date[jsonArray.size()]; 
 
  String dateString; 
 
  Date date; 
 
  for( int i = 0 ; i<jsonArray.size() ; i++ ){ 
 
  dateString = jsonArray.getString(i); 
 
  date = DateUtil.stringToDate(dateString, DataFormat); 
 
  dateArray[i] = date; 
 
  } 
 
  return dateArray; 
 
  } 
 
  /**
 
  * 從json數組中解析出java Integer型對象數組
 
  * @param jsonString
 
  * @return
 
  */ 
 
  public static Double[] getDoubleArray4Json(String jsonString){ 
 
  JSONArray jsonArray = JSONArray.fromObject(jsonString); 
 
  Double[] doubleArray = new Double[jsonArray.size()]; 
 
  for( int i = 0 ; i<jsonArray.size() ; i++ ){ 
 
  doubleArray[i] = jsonArray.getDouble(i); 
 
  } 
 
  return doubleArray; 
 
  } 
 
  /**
 
  * 將java對象轉換成json字符串
 
  * @param javaObj
 
  * @return
 
  */ 
 
  public static String getJsonString4JavaPOJO(Object javaObj){ 
 
  JSONObject json; 
 
  json = JSONObject.fromObject(javaObj); 
 
  return json.toString(); 
 
  } 
 
  /**
 
  * 將java對象轉換成json字符串,並設定日期格式
 
  * @param javaObj
 
  * @param dataFormat
 
  * @return
 
  */ 
 
  public static String getJsonString4JavaPOJO(Object javaObj , String dataFormat){ 
 
  JSONObject json; 
 
  JsonConfig jsonConfig = configJson(dataFormat); 
 
  json = JSONObject.fromObject(javaObj,jsonConfig); 
 
  return json.toString(); 
 
  } 
 
  /**
 
  * @param args
 
  */ 
 
  public static void main(String[] args) { 
 
  // TODO 自動生成方法存根 
 
  } 
 
  /**
 
  * JSON 時間解析器具
 
  * @param datePattern
 
  * @return
 
  */ 
 
  public static JsonConfig configJson(String datePattern) { 
 
  JsonConfig jsonConfig = new JsonConfig(); 
 
  jsonConfig.setExcludes(new String[]{""}); 
 
  jsonConfig.setIgnoreDefaultExcludes(false); 
 
  jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); 
 
  jsonConfig.registerJsonValueProcessor(Date.class, 
 
  new DateJsonValueProcessor(datePattern)); 
 
  return jsonConfig; 
 
  } 
 
  /**
 
  *
 
  * @param excludes
 
  * @param datePattern
 
  * @return
 
  */ 
 
  public static JsonConfig configJson(String[] excludes, 
 
  String datePattern) { 
 
  JsonConfig jsonConfig = new JsonConfig(); 
 
  jsonConfig.setExcludes(excludes); 
 
  jsonConfig.setIgnoreDefaultExcludes(false); 
 
  jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); 
 
  jsonConfig.registerJsonValueProcessor(Date.class, 
 
  new DateJsonValueProcessor(datePattern)); 
 
  return jsonConfig; 
 
  } 
 
  } /**
 
  * linkwise
 
  */ 
 
  package com.linghui.common.util.jsonutil; 
 
  import java.text.DateFormat; 
 
  import java.text.SimpleDateFormat; 
 
  import java.util.Date; 
 
  import net.sf.json.JsonConfig; 
 
  import net.sf.json.processors.JsonValueProcessor; 
 
  /**
 
  * @author robert.feng
 
  *
 
  */ 
 
  public class DateJsonValueProcessor implements JsonValueProcessor { 
 
  public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd"; 
 
  private DateFormat dateFormat; 
 
  /**
 
  * 構造方法.
 
  *
 
  * @param datePattern 日期格式
 
  */ 
 
  public DateJsonValueProcessor(String datePattern) { 
 
  if( null == datePattern ) 
 
  dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN); 
 
  else 
 
  dateFormat = new SimpleDateFormat(datePattern); 
 
  } 
 
  /* (非 Javadoc)
 
  * @see net.sf.json.processors.JsonValueProcessor#processArrayValue(java.lang.Object, net.sf.json.JsonConfig)
 
  */ 
 
  public Object processArrayValue(Object arg0, JsonConfig arg1) { 
 
  // TODO 自動生成方法存根 
 
  return process(arg0); 
 
  } 
 
  /* (非 Javadoc)
 
  * @see net.sf.json.processors.JsonValueProcessor#processObjectValue(java.lang.String, java.lang.Object, net.sf.json.JsonConfig)
 
  */ 
 
  public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) { 
 
  // TODO 自動生成方法存根 
 
  return process(arg1); 
 
  } 
 
  private Object process(Object value) { 
 
  return dateFormat.format((Date) value); 
 
  } 
 
  } 
 
 
Java代碼 
package com.dozingcatsoftware.bouncy.util; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
 
public class JSONUtils { 
 
        /**
         * If argument is a JSONArray or JSONObject, returns the equivalent List or Map. If argument is JSONObject.NULL, returns null.
         * Otherwise, returns the argument unchanged.
         */ 
        public static Object objectFromJSONItem (Object jsonItem) { 
                if (jsonItem == JSONObject.NULL) { 
                        return null; 
                } 
                if (jsonItem instanceof JSONArray) { 
                        return listFromJSONArray((JSONArray)jsonItem); 
                } 
                if (jsonItem instanceof JSONObject) { 
                        return mapFromJSONObject((JSONObject)jsonItem); 
                } 
                return jsonItem; 
        } 
 
        /**
         * Returns a List with the same objects in the same order as jsonArray. Recursively converts nested JSONArray and JSONObject
         * values to List and Map objects.
         */ 
        public static List listFromJSONArray (JSONArray jsonArray) { 
                List result = new ArrayList(); 
                try { 
                        for (int i = 0; i < jsonArray.length(); i++) { 
                                Object obj = objectFromJSONItem(jsonArray.get(i)); 
                                result.add(obj); 
                        } 
                } catch (JSONException ex) { 
                        throw new RuntimeException(ex); 
                } 
                return result; 
        } 
 
        /**
         * Returns a List with the same keys and values as jsonObject. Recursively converts nested JSONArray and JSONObject values to
         * List and Map objects.
         */ 
        public static Map mapFromJSONObject (JSONObject jsonObject) { 
                Map result = new HashMap(); 
                try { 
                        for (Iterator ki = jsonObject.keys(); ki.hasNext();) { 
                                String key = (String)ki.next(); 
                                Object value = objectFromJSONItem(jsonObject.get(key)); 
                                result.put(key, value); 
                        } 
                } catch (JSONException ex) { 
                        throw new RuntimeException(ex); 
                } 
                return result; 
        } 
 
        /**
         * Returns a List created by parsing the string argument as a JSON array and calling listFromJSONArray.
         */ 
        public static List listFromJSONString (String jsonString) { 
                try { 
                        return listFromJSONArray(new JSONArray(jsonString)); 
                } catch (JSONException ex) { 
                        throw new RuntimeException(ex); 
                } 
        } 
 
        /**
         * Returns a Map created by parsing the string argument as a JSON object and calling mapFromJSONObject.
         */ 
        public static Map mapFromJSONString (String jsonString) { 
                try { 
                        return mapFromJSONObject(new JSONObject(jsonString)); 
                } catch (JSONException ex) { 
                        throw new RuntimeException(ex); 
                } 
        } 
 

發佈留言