`
yxgyh
  • 浏览: 270118 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

任意对象转化为JSON

    博客分类:
  • JAVA
阅读更多
import java.beans.IntrospectionException;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.math.BigDecimal;
    import java.math.BigInteger;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    /**
     * 序列化对象为JSON格式 遵循JSON组织公布标准
     * 
     * @date 2008/05/07
     * @version 1.0.0
     */
    public class Json {
        /** Commons Logging instance. */
        private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Json.class);
        /**
         * @param obj 任意对象
         * @return String
         */
        public static String object2json(Object obj) {
            StringBuilder json = new StringBuilder();
            if (obj == null) {
                json.append("\"\"");
            } else if (obj instanceof String || obj instanceof Integer || obj instanceof Float || obj instanceof Boolean
                    || obj instanceof Short || obj instanceof Double || obj instanceof Long || obj instanceof BigDecimal
                    || obj instanceof BigInteger || obj instanceof Byte) {
                json.append("\"").append(string2json(obj.toString())).append("\"");
            } else if (obj instanceof Object[]) {
                json.append(array2json((Object[]) obj));
            } else if (obj instanceof List) {
                json.append(list2json((List<?>) obj));
            } else if (obj instanceof Map) {
                json.append(map2json((Map<?, ?>) obj));
            } else if (obj instanceof Set) {
                json.append(set2json((Set<?>) obj));
            } else {
                json.append(bean2json(obj));
            }
            return json.toString();
        }
        /**
         * @param bean bean对象
         * @return String
         */
        public static String bean2json(Object bean) {
            StringBuilder json = new StringBuilder();
            json.append("{");
            PropertyDescriptor[] props = null;
            try {
                props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
            } catch (IntrospectionException e) {
            }
            if (props != null) {
                for (int i = 0; i < props.length; i++) {
                    try {
                        String name = object2json(props[i].getName());
                        String value = object2json(props[i].getReadMethod().invoke(bean));
                        json.append(name);
                        json.append(":");
                        json.append(value);
                        json.append(",");
                    } catch (Exception e) {
                    }
                }
                json.setCharAt(json.length() - 1, '}');
            } else {
                json.append("}");
            }
            return json.toString();
        }
        /**
         * @param list list对象
         * @return String
         */
        public static String list2json(List<?> list) {
            StringBuilder json = new StringBuilder();
            json.append("[");
            if (list != null && list.size() > 0) {
                for (Object obj : list) {
                    json.append(object2json(obj));
                    json.append(",");
                }
                json.setCharAt(json.length() - 1, ']');
            } else {
                json.append("]");
            }
            return json.toString();
        }
        /**
         * @param array 对象数组
         * @return String
         */
        public static String array2json(Object[] array) {
            StringBuilder json = new StringBuilder();
            json.append("[");
            if (array != null && array.length > 0) {
                for (Object obj : array) {
                    json.append(object2json(obj));
                    json.append(",");
                }
                json.setCharAt(json.length() - 1, ']');
            } else {
                json.append("]");
            }
            return json.toString();
        }
        /**
         * @param map map对象
         * @return String
         */
        public static String map2json(Map<?, ?> map) {
            StringBuilder json = new StringBuilder();
            json.append("{");
            if (map != null && map.size() > 0) {
                for (Object key : map.keySet()) {
                    json.append(object2json(key));
                    json.append(":");
                    json.append(object2json(map.get(key)));
                    json.append(",");
                }
                json.setCharAt(json.length() - 1, '}');
            } else {
                json.append("}");
            }
            return json.toString();
        }
        /**
         * @param set 集合对象
         * @return String
         */
        public static String set2json(Set<?> set) {
            StringBuilder json = new StringBuilder();
            json.append("[");
            if (set != null && set.size() > 0) {
                for (Object obj : set) {
                    json.append(object2json(obj));
                    json.append(",");
                }
                json.setCharAt(json.length() - 1, ']');
            } else {
                json.append("]");
            }
            return json.toString();
        }
        /**
         * @param s 参数
         * @return String
         */
        public static String string2json(String s) {
            if (s == null)
                return "";
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                char ch = s.charAt(i);
                switch (ch) {
                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;
                case '/':
                    sb.append("\\/");
                    break;
                default:
                    if (ch >= '\u0000' && ch <= '\u001F') {
                        String ss = Integer.toHexString(ch);
                        sb.append("\\u");
                        for (int k = 0; k < 4 - ss.length(); k++) {
                            sb.append('0');
                        }
                        sb.append(ss.toUpperCase());
                    } else {
                        sb.append(ch);
                    }
                }
            }
            return sb.toString();
        }
    }

 

分享到:
评论

相关推荐

    json字符串转换c++类对象

    json 字符串转成c++类对象,json 字符串转成c++类对象

    java实现将实体类list集合,转化成geojson字符串

    GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面这几...

    C#Json解析类,Json协议解析。

    C#Json解析类,使用本文中的JSONConvert类可将任意JSON字符串转化为JSONObject或JSONArray对象,并获取需要的值,克服了.NET自带JSON类反序列化时需知道并引用序列化时使用的类的缺点。当然,也可以使用JSONConvert...

    python中如何处理Json格式以及区分dict数据

    Python的dict的key可以是任意可hash对象,json只能是字符串。形式上有些相像,但json是纯文本的,无法直接操作 json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,但dict就无所谓了。 ...

    QtJsonSerializer:一个库,用于对JSON和CBOR之间的QObject进行通用的序列化和反序列化

    该库最近更新为4.0.0。 请参阅“以了解如何将项目从3. *迁移到4.0.0。 不必担心,对于大多数现有项目,只有类名会更改。 产品特点 在一般情况下,将QObjects,Q_GADGETS,列表,映射等序列化为JSON / CBOR ...当然...

    jquery+json实现分页效果

    为了应用的通用性,首先要根据反射机制,能将要返回的任意类型的结果对象转化成Json类型的格式。 public static String toJSON(Object obj) { HashMap map = new HashMap(); Class c = obj.getClass(); // 利用反射...

    JavaScript中常用内置函数.docx

    此外,eval 函数也可以用于将字符串形式的 JSON 数据转换为 JavaScript 对象。 2. isFinite 函数 isFinite 函数⽤来确定参数是否是⼀个有限数值,其中 number 参数是必选项,可以是任意的数值。如果该参数为⾮数字...

    C#josn解析

    使用本文中的JSONConvert类可将任意JSON字符串转化为JSONObject或JSONArray对象,并获取需要的值,克服了.NET自带JSON类反序列化时需知道并引用序列化时使用的类的缺点。当然,也可以使用JSONConvert类进行序列化,...

    osharp3-demo:osharp v3.0演示

    数据映射:AutoMapper,主要用于数据传输对象DTO与数据实体模型Model之间的相互转化,免于繁杂的对象属性赋值 IoC组件:Autofac,定义了一个专用于处理映射的空接口IDependency,用于处理IoC接口与实现的批量映射,...

    osharp.v2:osharp框架版本2.0

    数据映射:AutoMapper,主要用于数据传输对象DTO与数据实体模型Model之间的相互转化,免于繁杂的对象属性赋值 IoC组件:Autofac,定义了一个专用于处理映射的空接口IDependency,用于处理IoC接口与实现的批量映射,...

    士农库1.1 头文件、lib、dll 两个测试项目

    将对象和变量转化成二进制,并将二进制转回变量和对象。  拆分,如字符串。 4.3 SNMFC 一 网络功能  网络基本功能:如获取本机IP,通过域名获取IP,IE版本。  HTML对话框的封装类。  用于服务端的,带“回调...

    护网面试题总结+DD安全工程师笔试问题

    知识点:序列化是将对象转化为可传输的字节序列过程,反序列化是将字节序列还原为对象的过程。序列化和反序列化是许多编程语言中的基本概念。 14. 常见的中间件漏洞? 知识点:中间件漏洞包括 IISPUT 漏洞、短...

    ASP.NET MVC 3高级编程

    11.2.3 创建任意对象 278 11.3 小结 280 第12章 单元测试 281 12.1 单元测试和测试驱动开发的意义 282 12.1.1 单元测试的定义 282 12.1.2 测试驱动开发的定义 283 12.2 创建单元测试项目 286 12.2.1 检查默认...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法...

    ExtAspNet_v2.3.2_dll

    -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法...

Global site tag (gtag.js) - Google Analytics