日期:2014-05-16  浏览次数:20403 次

Java对Json的工具类 JsonUtil 绿色版
绿色版,无污染,无需下载第三方包.转自某某博客.

package json;   
  
import java.lang.reflect.Method;   
import java.util.Collection;   
import java.util.Map;   
import java.util.Set;   
  
/**  
 * 作者 赵磊  
 *   
 * JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式 除了字符 ",\,/  
 * 和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他 Unicode 字符可以直接输出 Object 对象在 JSON 中是用 {}  
 * 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map<String, Object>,而不是  
 * Java 的 Class 。注意 Key 只能用 String 表示。  
 *   
 * Prototype提供了 evalJSON() 方法,能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量  
 *   
 *   
 */  
public final class JsonUtil   
{   
  
    /**  
     * 把对象封装为JSON格式  
     *   
     * @param o  
     *            对象  
     * @return JSON格式  
     */  
    @SuppressWarnings("unchecked")   
    public static String toJson(final Object o)   
    {   
        if (o == null)   
        {   
            return "null";   
        }   
        if (o instanceof String) //String   
        {   
            return string2Json((String) o);   
        }   
        if (o instanceof Boolean) //Boolean   
        {   
            return boolean2Json((Boolean) o);   
        }   
        if (o instanceof Number) //Number   
        {   
            return number2Json((Number) o);   
        }   
        if (o instanceof Map) //Map   
        {   
            return map2Json((Map<String, Object>) o);   
        }   
        if (o instanceof Collection) //List  Set   
        {   
            return collection2Json((Collection) o);   
        }   
        if (o instanceof Object[]) //对象数组   
        {   
            return array2Json((Object[]) o);   
        }   
  
        if (o instanceof int[])//基本类型数组   
        {   
            return intArray2Json((int[]) o);   
        }   
        if (o instanceof boolean[])//基本类型数组   
        {   
            return booleanArray2Json((boolean[]) o);   
        }   
        if (o instanceof long[])//基本类型数组   
        {   
            return longArray2Json((long[]) o);   
        }   
        if (o instanceof float[])//基本类型数组   
        {   
            return floatArray2Json((float[]) o);   
        }   
        if (o instanceof double[])//基本类型数组   
        {   
            return doubleArray2Json((double[]) o);   
        }   
        if (o instanceof short[])//基本类型数组   
        {   
            return shortArray2Json((short[]) o);   
        }   
        if (o instanceof byte[])//基本类型数组   
        {   
            return byteArray2Json((byte[]) o);   
        }   
        if (o instanceof Object) //保底收尾对象   
        {   
            return object2Json(o);   
        }   
  
        throw new RuntimeException("不支持的类型: " + o.getClass().getName());   
    }   
  
    /**  
     * 将 String 对象编码为 JSON格式,只需处理好特殊字符  
     *   
     * @param s  
     *            String 对象  
     * @return JSON格式  
     */  
    static String string2Json(final String s)   
    {   
        final StringBuilder sb = new StringBuilder(s.length() + 20);   
        sb.append('\"');   
        for (int i = 0; i < s.length(); i++)   
        {   
            final char c = s.charAt(i);   
            switch (c)   
            {   
            case '\"':   
                sb.append("\\\"");   
                break;   
            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;   
            default:   
                sb.append(c);   
            }