`

Java对Json的工具类 JsonUtil 绿色版

    博客分类:
  • Java
阅读更多
绿色版,无污染,无需下载第三方包.转自某某博客.

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);   
            }   
        }   
        sb.append('\"');   
        return sb.toString();   
    }   
  
    /**  
     * 将 Number 表示为 JSON格式  
     *   
     * @param number  
     *            Number  
     * @return JSON格式  
     */  
    static String number2Json(final Number number)   
    {   
        return number.toString();   
    }   
  
    /**  
     * 将 Boolean 表示为 JSON格式  
     *   
     * @param bool  
     *            Boolean  
     * @return JSON格式  
     */  
    static String boolean2Json(final Boolean bool)   
    {   
        return bool.toString();   
    }   
  
    /**  
     * 将 Collection 编码为 JSON 格式 (List,Set)  
     *   
     * @param c  
     * @return  
     */  
    static String collection2Json(final Collection<Object> c)   
    {   
        final Object[] arrObj = c.toArray();   
        return toJson(arrObj);   
    }   
  
    /**  
     * 将 Map<String, Object> 编码为 JSON 格式  
     *   
     * @param map  
     * @return  
     */  
    static String map2Json(final Map<String, Object> map)   
    {   
        if (map.isEmpty())   
        {   
            return "{}";   
        }   
        final StringBuilder sb = new StringBuilder(map.size() << 4); //4次方   
        sb.append('{');   
        final Set<String> keys = map.keySet();   
        for (final String key : keys)   
        {   
            final Object value = map.get(key);   
            sb.append('\"');   
            sb.append(key); //不能包含特殊字符   
            sb.append('\"');   
            sb.append(':');   
            sb.append(toJson(value)); //循环引用的对象会引发无限递归   
            sb.append(',');   
        }   
        // 将最后的 ',' 变为 '}':    
        sb.setCharAt(sb.length() - 1, '}');   
        return sb.toString();   
    }   
  
    /**  
     * 将数组编码为 JSON 格式  
     *   
     * @param array  
     *            数组  
     * @return JSON 格式  
     */  
    static String array2Json(final Object[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4); //4次方   
        sb.append('[');   
        for (final Object o : array)   
        {   
            sb.append(toJson(o));   
            sb.append(',');   
        }   
        // 将最后添加的 ',' 变为 ']':    
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String intArray2Json(final int[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final int o : array)   
        {   
            sb.append(Integer.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String longArray2Json(final long[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final long o : array)   
        {   
            sb.append(Long.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String booleanArray2Json(final boolean[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final boolean o : array)   
        {   
            sb.append(Boolean.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String floatArray2Json(final float[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final float o : array)   
        {   
            sb.append(Float.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String doubleArray2Json(final double[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final double o : array)   
        {   
            sb.append(Double.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String shortArray2Json(final short[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final short o : array)   
        {   
            sb.append(Short.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    static String byteArray2Json(final byte[] array)   
    {   
        if (array.length == 0)   
        {   
            return "[]";   
        }   
        final StringBuilder sb = new StringBuilder(array.length << 4);   
        sb.append('[');   
        for (final byte o : array)   
        {   
            sb.append(Byte.toString(o));   
            sb.append(',');   
        }   
        // set last ',' to ']':   
        sb.setCharAt(sb.length() - 1, ']');   
        return sb.toString();   
    }   
  
    public static String object2Json(final Object bean)   
    {   
        //数据检查   
        if (bean == null)   
        {   
            return "{}";   
        }   
        final Method[] methods = bean.getClass().getMethods(); //方法数组   
        final StringBuilder sb = new StringBuilder(methods.length << 4); //4次方   
        sb.append('{');   
  
        for (final Method method : methods)   
        {   
            try  
            {   
                final String name = method.getName();   
                String key = "";   
                if (name.startsWith("get"))   
                {   
                    key = name.substring(3);   
  
                    //防死循环   
                    final String[] arrs =   
                    { "Class" };   
                    boolean bl = false;   
                    for (final String s : arrs)   
                    {   
                        if (s.equals(key))   
                        {   
                            bl = true;   
                            continue;   
                        }   
                    }   
                    if (bl)   
                    {   
                        continue; //防死循环   
                    }   
                }   
                else if (name.startsWith("is"))   
                {   
                    key = name.substring(2);   
                }   
                if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0)   
                {   
                    if (key.length() == 1)   
                    {   
                        key = key.toLowerCase();   
                    }   
                    else if (!Character.isUpperCase(key.charAt(1)))   
                    {   
                        key = key.substring(0, 1).toLowerCase() + key.substring(1);   
                    }   
                    final Object elementObj = method.invoke(bean);   
  
                    //System.out.println("###" + key + ":" + elementObj.toString());   
  
                    sb.append('\"');   
                    sb.append(key); //不能包含特殊字符   
                    sb.append('\"');   
                    sb.append(':');   
                    sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归   
                    sb.append(',');   
                }   
            }   
            catch (final Exception e)   
            {   
                //e.getMessage();   
                throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e);   
            }   
        }   
        if (sb.length() == 1)   
        {   
            return bean.toString();   
        }   
        else  
        {   
            sb.setCharAt(sb.length() - 1, '}');   
            return sb.toString();   
        }   
    }   
  
    private JsonUtil()   
    {   
    }   
}  
}  

447. } 
分享到:
评论

相关推荐

    JsonUtil json工具类

    JsonUtil json工具类 JsonUtil json工具类

    json数据转换工具jsonutil

    JSONUtil是一个Java工具类,专门设计用于处理JSON数据,它提供了方便的方法将JSON字符串与Java对象之间进行转换,无需依赖其他外部jar包。本文将深入探讨JSONUtil的核心功能及其在实际开发中的应用。 首先,...

    JAVA-JSON工具转换类

    `JsonUtil.java`看起来是一个自定义的工具类,很可能包含了对`json-lib`和`ezmorph`的封装,提供了简洁易用的API供开发者进行JSON操作。可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`...

    Gson工具类 JsonUtil

    Google json工具类,将java对象装换为json,支持泛型和任意类型

    json 转化工具类

    在Java编程中,我们经常需要将JSON字符串转化为Java对象,或者将Java对象转化为JSON字符串,这时就需要用到JSON转化工具类。这个"json 转化工具类"就是为了解决这样的问题。 在Java中,有很多流行的库可以处理JSON...

    JsonUitl(一 个json转成list的简单通用工具类)

    `JsonUtil` 是一个Java工具类,专门用来处理JSON数据,特别是将JSON对象数组转换为List类型,方便对数据进行进一步的操作。 在Java中,处理JSON数据通常需要借助第三方库,如Jackson、Gson或Fastjson等。这些库提供...

    JsonUtils(Json转换工具类)

    《JsonUtils:强大的Json转换工具类》 在Java开发中,JSON作为一种轻量级的数据交换格式,被广泛用于服务器与客户端之间的数据传输。为了方便开发者处理JSON格式的数据,出现了许多库,如Jackson、Gson、Fastjson等...

    JSONUtil java工具类,快速方便读取JSON

    JSONUtil java工具类,快速方便读取JSON

    JsonUtil代码工具类

    本文将深入探讨“JsonUtil”代码工具类的相关知识点,主要基于提供的两个文件:JsonParser.java和JsonValue.java。 JsonUtil工具类通常包含了处理JSON对象与Java对象之间转换的一系列方法。在描述中提到的“2个工具...

    java处理JSON格式数据的通用类

    处理JSON格式数据是开发中的常见任务,为此,我们可以创建一个通用的Java类来简化这一过程。以下是对标题和描述中所述知识点的详细说明: 1. JSON基本概念: JSON是一种独立于语言的数据格式,它基于ECMAScript的...

    JSON jar包含源码及应用类JSONUtil

    JSON jar包含源码及应用类JSONUtil,可以直接查看源码不用反编译,并且可以直接调用JSONUtil工具类进行,JSon字符串转换为JavaBean ,并可以把JavaBean转换为JSon字符串。

    Java Json生成工具 源代码

    "util"包通常用于存放各种通用工具类,这里的"JsonUtil"可能是对已有JSON库的一个简单封装,以提供更加便捷的使用方式。比较"lyzjson"与"JsonUtil"的性能、易用性、功能完备性,可以帮助我们评估它们在实际项目中的...

    java解析Json字符串

    Java解析Json字符串是Java开发中常见的一项任务,特别是在与Web服务交互、数据交换或存储时。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java...

    java操作json的通用类

    在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它...在实际项目中,这样的工具类和处理器对于处理JSON数据至关重要,它们使得在Java应用中与其他系统进行数据交换变得更加便捷和可靠。

    json转换java常用工具类

    在提供的代码中,`JsonUtil`类是用于处理JSON与Java对象之间转换的一个工具类。它使用了开源库EZMorph和JSON库(可能是json-lib),这两个库在Java社区中广泛用于JSON操作。 `getDTO`方法接收一个JSON字符串和一个...

    Java的JsonUtil

    JSONUtil是Java中用于处理JSON数据的工具类,通常用于将Java对象转换为JSON字符串,或者将JSON字符串反序列化为Java对象。这个过程在Java中被称为对象序列化和反序列化。 Java的`JsonUtil`类通常是自定义的工具类,...

    Java实现的JSONUtil工具类与用法示例

    JSONUtil工具类是Java开发中处理JSON数据的一种实用工具,它简化了JSON对象与Java对象之间的转换过程。在本文中,我们将深入探讨JSONUtil工具类的实现和使用方法,以及如何利用阿里巴巴的Fastjson库来增强JSON操作。...

    java自己修改的支持public属性、父类属性的json自动编译的工具类

    综上所述,`JsonUtil`是一个自定义的工具类,它利用Java反射API实现了对包含public属性和父类属性的Java对象的JSON序列化和反序列化。理解和使用这个类需要对Java反射、JSON处理以及可能使用的库(如Jackson或Gson)...

    JsonUtil工具类

    而JsonUtil工具类则是开发者为了简化JSON与Java对象之间的转换而创建的,它极大地提高了开发效率。本文将详细探讨JsonUtil及其相关库的使用和原理。 首先,JsonUtil工具类通常依赖于一些第三方库,如Jackson、Gson...

Global site tag (gtag.js) - Google Analytics