`

json解析和封装Util(很实用)

    博客分类:
  • 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格式 
         */ 
        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() 
        { 
        } 
} 

 

测试类:


public class TestObject2Json {
 public static void main(String[] args) {
  
  Student s=new Student();
  s.setId(1);
  s.setMoney(20);
  s.setName("huahua");
  s.setPwd("123");
  System.out.println(JsonUtil.toJson(s));
 }

}

 

分享到:
评论

相关推荐

    Jackson JSON框架的Util化封装

    《让Jackson JSON生成的数据包含的中文以unicode方式编码》一文的配套代码。文章地址:http://blog.csdn.net/chaijunkun/article/details/8257209

    java常用工具类封装util.rar

    java常用工具类封装util.rarjava常用工具类封装util.rarjava常用工具类封装util.rarjava常用工具类封装util.rar

    Json解析ParsreTools.zip

    一个SON解析封装类, public class ParsreTools { public static &lt;T&gt; T pasrsJsonStrSimpleT(String jsonString, String key, Class&lt;T&gt; cls) { T t = null; Field fields[] = cls.getDeclaredFields(); ...

    网络获取json解析json以及子线程显示

    import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org....

    Utiljs一些很实用的javaScript函数封装集合

    Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包含:数组类、浏览器类、日期类、函数类、数学类、媒体类、节点类、对象类、字符串类、类型检测类、正则表达式类等内容。

    json 解析包(源代码)

    高效的JSON与Object互转的工具源代码,如果JSON数据未按该工具规定的数据格式转化成对象,将转化成java.util.Map实例。(比JSON官方的API更适用。支持对象之间的多级引用,支持Map, List等集合。不需要引用其它中间...

    阿里巴巴的JSON实用jar包集合整理

    fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴开发。 包中包含fastjson-1.1.37.jar,fastjson-1.2.2.jar ,fastjson-1.2.2-sources.jar等

    jsonapi-util:用于处理和解析jsonapi响应对象的实用程序

    jsonapi-util 使用jsonapi 1.0结构的Util函数 安装 您可以使用节点软件包管理器( npm )安装: npm install jsonapi-util 用法 var jsonapi = require('jsonapi-util') var result = jsonapi.parse({ data: [ {...

    封装JSON工具包

    对net.sf.json.JSONObject的进一步封装的一个工具类

    C# Util 实用工具类

    C# Util 实用工具类 ,包含:Json、Net、Time、Compress、Config、Enums、File等等等常用使用工具类

    dynamodb-json:DynamoDB json util,用于将Dynamodb json格式的字符串加载和转储到python对象,反之亦然

    DynamoDB json util可以将Dynamodb json格式的字符串加载和转储到python对象中,反之亦然 安装 只需使用pip: pip install dynamodb-json 利用 dynamodb-json util与json加载和转储功能相同: import time import...

    java.util.Date到Json日期

    java.util.Date到Json日期的转换

    java解析json

    java解析json字符串。 commons-beanutils-1.9.0 commons-collections-3.2.1 commons-lang-2.6 commons-logging-1.1.3 ezmorph-1.0.6 json-lib-2.4-jdk15 demo: package com; import java.util.ArrayList;...

    AnyFo - Util - Json4Ext:通用ExtJS数据交换处理

    在大家开发的系统中,如果程序用ExtJS做表现层,那么就需要使ExtJS开发的界面和后台Java代码中生成的数据交互,一般来说,可以选 择XML格式和Json格式的数据进行交互,但是XML格式的数据操作相对繁琐,因此,大部分...

    json的解析

    该小项目完整全面整理了java解析json各中写法,以及json的生成、遍历。 该项目收集整理json所需的jar包,使用文档。 /** * json的生成、遍历 */ import java.util.*; import net.sf.json.JSONArray; import ...

    谷歌天气并json解析xml

    import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import ...

    无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它

    这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家

    springMVC poi解析ajax上传excel文件,返回json对象\list数组

    解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel,读取内容后保存到List中,再将List转Json(使用Linked,增删快...

    java json ajax util

    将对集合,对象转换成JSON格式的数据抽出来一个类,备份下。以后自己也可以用

    JDK研究系列--》util实用类util实用类(java.util part2)

    合适研究底层研发员,但,一般程序员也必须掌握的要点 JDK研究系列--》util实用类util实用类(java.util part2)

Global site tag (gtag.js) - Google Analytics