`
rain_2372
  • 浏览: 680804 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解析json和封装json

    博客分类:
  • java
阅读更多
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()
        {
        }
}
分享到:
评论

相关推荐

    C#封装和解析json

    总之,C#中的JSON封装和解析主要依赖于像Json.NET这样的第三方库。通过这些库,我们可以轻松地在C#对象和JSON字符串之间进行转换,从而实现数据的交换和存储。理解和掌握这些基本操作对于任何C#开发者来说都至关重要...

    基于Newtonsoft.Json实现Json数据解析和封装

    Newtonsoft.Json已经足够强大,易用性也没得说。但是在使用过程中存在着一个问题,如果数据不存在...JsonObject类和JsonArray类可以相互嵌套,支持原生类的JsonPath检索能力,满足Json数据解析和Json数据封装常见需求。

    Android 实用的数据json数据解析封装类

    3. **使用封装类解析JSON** 假设我们有一个JSON字符串,里面包含一个用户对象的数组: ```json [ {"name": "Tom", "age": 25}, {"name": "Jerry", "age": 30} ] ``` 我们可以创建一个User类来表示用户对象:...

    JSON的封装和解析

    JSON(JavaScript Object ...以上就是关于JSON封装和解析的基本知识,包括JSON格式、库的使用、Socket通信以及解析过程中的注意事项。理解并熟练运用这些概念和方法,能够帮助你在实际开发中有效地处理数据交换。

    Json的封装与解析demo

    本篇主要探讨JSON的封装与解析,帮助你理解并掌握这一关键技能。 一、JSON的结构与语法 1. 对象:JSON对象由大括号 `{}` 包裹,其中存储键值对,键用双引号 "" 括起,冒号 `:` 分隔键和值,各个键值对之间用逗号 `,...

    C实现对JSON的封装,对json格式解析,封装等.

    本篇文章将详细介绍如何使用C语言通过`cJSON`库对JSON进行封装和解析。 首先,`cJSON`库提供了两种基本类型,对应JSON的两种基本结构:`cJSON_Object`(JSON对象,以大括号{}表示)和`cJSON_Array`(JSON数组,以方...

    java中json的封装和解析

    三、使用Jackson进行JSON封装 1. 添加依赖 在Maven项目中,需要在pom.xml中添加Jackson依赖: ```xml &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-databind &lt;version&gt;2.x.x ``` 2....

    json解析和封装案例

    2. 解析JSON:演示如何使用`JSON.parse()`函数将JSON字符串转化为JavaScript对象。 3. 封装JSON:使用`JSON.stringify()`函数将JavaScript对象转化为JSON字符串。 4. 错误处理:处理解析和封装时可能遇到的错误,如...

    json数据封装,传递,解析

    在服务器端,无论使用的是Node.js、Java、Python还是其他语言,都有相应的库或内建功能来解析JSON字符串。例如,在Node.js中,我们可以使用`JSON.parse()`: ```javascript const express = require('express'); ...

    QT纯C++实现JSON的封装、解析、修改、删除!

    解析JSON数据则需要使用QJsonDocument的fromJson()函数,该函数接受一个QString类型的JSON字符串,返回一个QJsonDocument对象。例如: ```cpp QString jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\...

    VB6解析json类库

    通过这些文件,开发者可以了解到如何在VB6项目中集成和使用这个JSON解析类库,包括如何实例化JSON对象、解析JSON字符串、创建JSON对象、以及如何将VB6对象转换为JSON格式。此外,通过测试窗体(frmTest.frm)和测试...

    Android JSON数据的封装及解析

    1. **JSON对象解析**:使用`JSONObject`类解析JSON对象。 ```java JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString("name"); ``` 2. **JSON数组解析**:使用`...

    json解析封装和解析

    { "msgtype":1, "id":"1,2", "person":[ { "username":"zpq", "password":"zpq", "client":1 } ,{ "username":"zxx", "password":"zxx", "client":1 }] } 封装和解析

    json对象封装及解析所需的JAR包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和应用程序之间的数据传输,因为它易于阅读和编写,同时也易于机器解析和生成。在Java中,处理JSON对象通常需要依赖特定的库,本...

    MFC使用json11解析JSON

    json11是一个小型且易于使用的C++ JSON解析器和生成器,它提供了将JSON字符串转换为C++对象以及反之的过程。下面我们将详细讨论如何在MFC项目中集成json11库,并实现JSON数据的解析和序列化。 首先,你需要获取json...

    c#json封装和解析练习例子

    6. **从XML到JSON和反之亦然** Json.NET库还支持XML与JSON之间的转换。例如,将XML字符串转换为JSON: ```csharp string xmlString = "&lt;Person&gt;&lt;Name&gt;张三&lt;/Name&gt;&lt;Age&gt;30&lt;/Age&gt;&lt;/Person&gt;"; XDocument xmlDoc = ...

    JAVA解析JSON相关.docx

    标题与描述均提到了“JAVA解析JSON”,这表明文档主要关注的是如何在Java环境中解析JSON数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java...

    用jquery解析JSON数据的方法

    用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里...

    json 封装和解析数据

    通过学习和掌握JSON封装和解析数据的知识,开发者可以更高效地进行数据传输和处理,提高软件的可维护性和互操作性。结合提供的"json lib"压缩包,可能包含了一些关于JSON处理的库或示例代码,可以进一步深入研究和...

    使用json封装数据 html源代码

    标题“使用json封装数据 html源代码”指的是利用JSON来组织和结构化数据,然后在HTML页面中展示或操作这些数据。在Web开发中,JSON常用于从服务器向客户端传递数据,例如在AJAX(Asynchronous JavaScript and XML)...

Global site tag (gtag.js) - Google Analytics