序列化工具详细代码:

http://blog.csdn.net/arescj/article/details/7259405

 

 

android自带的JSON比较弱,而net.sf.json那个在android中会不兼容,于是lz开始了寻觅觅中,终于找到一个牛子自己写的解析json和封装json的工具,万谢啊,现在共享出来。
(声明:这不是什么第三方包,这就是一个工具类,tojson()和string2Json()两个方法就可以满足一些基本的需求啦)

import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

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) 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 c)
        {
                final Object[] arrObj = c.toArray();
                return toJson(arrObj);
        }

        /**
         * 将 Map 编码为 JSON 格式
         *
         * @param map
         * @return
         */
        static String map2Json(final Map map)
        {
                if (map.isEmpty())
                {
                        return "{}";
                }
                final StringBuilder sb = new StringBuilder(map.size() << 4); //4次方
                sb.append('{');
                final Set 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()
        {
        }
}

 

更多相关文章

  1. Radial GradientDrawable兼容问题
  2. Android入门——Drawable与对应的资源xml的应用
  3. 在AndroidStudio中使用GreenDAO
  4. Android基础教程(二)之五大布局对象
  5. Android(安卓)数据存储(二) 共享参数存储
  6. 移动架构39_RxAndroid二(变换调用:map、flatMap、lift、compose)
  7. [PX3][Android7.1]学习笔记 --- init.rc文件格式介绍
  8. ActionBar简单使用介绍和Tab切换的应用
  9. Android(安卓)Parcelable理解与使用(对象序列化)

随机推荐

  1. 【Android(安卓)UI设计】之自定义计时器
  2. 认识 Android(安卓)Service
  3. android ViewTreeObserver详细讲解
  4. 带倒计时提示的弹框
  5. android studio使用svn时忽略文件列表
  6. Android(安卓)重新编译资源文件
  7. Android(安卓)Modules 依赖关系,命令行
  8. Android(安卓)Property Animation 介绍(一
  9. Android隐藏标题栏的方法
  10. Android(安卓)Handler机制总结