`

Android封装Json工具类

阅读更多
package com.cz.app_user.utility;

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<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()
        {
        }
}

 

分享到:
评论

相关推荐

    Android 封装的工具类

    这里提到的"Android 封装的工具类"涵盖了几种关键的模块,包括网络请求、数据库操作、数据加密以及JSON解析。以下是对这些工具类的详细介绍: 1. **网络请求工具类(HttpUtils.java)** 在Android应用中,我们常常...

    Android JSON数据的封装及解析

    为了提高代码的可复用性和可维护性,我们可以创建专门的工具类,提供封装和解析的静态方法。 1. **封装方法**:可以创建一个静态方法,接收一个Java对象,返回JSON字符串。 2. **解析方法**:对应地,创建一个方法...

    android常用json传值解析工具类

    本篇文章将详细介绍如何使用阿里巴巴的Fastjson库进行JSON操作,并封装成一个方便使用的工具类,以适应各种常见的传值需求。 Fastjson是阿里巴巴提供的一款Java语言编写的高性能功能完备的JSON库。它不仅能够快速地...

    基于Android系统Api封装常用工具类

    在Android应用开发中,工具类(Utils)的封装是一个重要的环节,它可以帮助开发者高效地复用代码,提高开发效率。本项目"基于Android系统Api封装常用工具类"就是这样一个资源库,它集成了Android API的各种实用功能...

    基于Android系统Api封装常用工具类.zip

    4. **网络请求工具类**:基于Android的HttpURLConnection或者OkHttp库,封装网络请求接口,如GET、POST,支持异步和同步请求,处理JSON或XML数据,甚至可能包含缓存策略。 5. **权限管理工具类**:随着Android 6.0...

    OkHttp请求完美封装(并带工具类)

    MD5、RSA、Base64Utils、DialogUtil、ZXingUtils、GlideUtil、、、工具类 自己总结了一些必备的工具类,可直接放入工程,简单调用 对OkHttp进行了封装,简单调用,便于操作 进行了post、get、文件上传等进行封装

    Json一键转Javabean工具

    此外,对于动态生成的JSON数据,这样的工具也提供了很好的灵活性,无需每次都手动创建新的JavaBean类。 总之,"Json一键转Javabean工具"是Java开发者的得力助手,它简化了JSON数据到Java对象的转换过程,降低了开发...

    Android开发常用工具类

    在Android开发过程中,工具类(Utility Class)是开发者不可或缺的好帮手。它们通常包含一系列静态方法,用于执行特定任务,如日期时间处理、网络请求、数据解析等,从而提高代码的复用性和效率。以下是一些Android...

    封装Android中10个常用的工具类

    以下是对标题"封装Android中10个常用的工具类"和描述中所述知识点的详细解释: 1. **字符串处理工具类**: - `StringUtils`:提供对字符串的各种操作,如格式化、拼接、检查空值、分割、替换等。 - `HtmlUtils`:...

    Android-一个封装DiskLruCache的缓存工具类

    这个"Android-一个封装DiskLruCache的缓存工具类"正是为了简化开发者使用`DiskLruCache` 的过程而设计的。 `DiskLruCache` 是基于Least Recently Used(LRU)策略的磁盘缓存,它会优先删除最近最少使用的数据,以...

    android工具类 26个实用工具类

    在Android开发中,工具类(Util Classes)是程序员们经常使用的辅助代码集合,它们封装了常见的功能,使得代码更加简洁、可读性更强。这里提到的"android工具类 26个实用工具类"是一个集合,包含了多个针对Android...

    Android-Android常用的工具类集合为伸手党提供帮助

    4. **文件操作**:文件读写是Android应用中的重要环节,工具类可以封装`readFile()`、`writeFile()`、`deleteFile()`等方法,帮助开发者更便捷地处理本地文件。 5. **JSON解析**:在Android中,JSON作为一种轻量级...

    Android-轻量级android工具类辅助类通用类

    在Android应用开发中,工具类(Utils)和通用类(Common)是不可或缺的部分,它们能够帮助开发者快速实现一些常见的功能,提高代码复用性,降低项目复杂度。"Android-轻量级android工具类辅助类通用类"这个项目提供...

    Android 好用的各种工具类特别实用

    8. **JSON解析工具类**:`JsonUtils`可能封装了Gson, Jackson或Fastjson等库的使用,用于JSON字符串与Java对象之间的转换,简化了数据交换。 9. **颜色工具类**:`ColorUtils`可以帮助开发者进行颜色的混合、转换、...

    Android常用的工具类

    在Android开发中,工具类是开发者经常会用到的辅助组件,它们封装了各种常见的功能,以便在项目中快速调用,提高开发效率。本篇文章将详细介绍Android常用的工具类,包括APP管理类、Dialog类、File类、Gson解析类、...

    Android-OkHttp3.0网络工具类

    **Android-OkHttp3.0网络工具类** 在Android应用开发中,网络请求是不可或缺的一部分。OkHttp3.0是一个高效、易用的网络通信库,由Square公司开发,广泛应用于Android项目中。相较于旧版本,OkHttp3带来了许多性能...

    android 基本框架+常用工具类

    其次,Android开发中的工具类(Utils)是一些预先封装好的功能模块,开发者可以直接调用,以简化代码和提高开发效率。以下是一些常见的工具类及其作用: 1. **FileUtils**:文件操作工具类,提供了读写文件、创建...

    Android常用工具类集合

    本资源“Android常用工具类集合”是一个专门为Android平台设计的库,其中封装了一系列常用的工具方法,旨在简化开发流程。下面将详细介绍这个库中的关键知识点。 1. **网络请求封装**: - 使用RxJava进行网络请求...

    android 工具类 (超全) 集合打包拿走不谢~

    - JSON解析工具类:快速地进行JSON串与Java对象间的转换,如使用Gson或Jackson库。 - 异常处理工具类:统一异常捕获和处理,提高代码健壮性。 5. MyUtil-master项目结构: "MyUtil-master"这个文件名可能是项目...

Global site tag (gtag.js) - Google Analytics