zoukankan      html  css  js  c++  java
  • java 生产json。。。

    很简陋,不过一般应用足矣,有BUG麻烦说一声,尤其是字符串转义stringToJson函数(这个函数不是我写的,没测过),

    /**

     *  java生成json格式数据,一个简单的class,不需要第三方lib包支持
     */
    package lhp.code.tools;

    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;

    /**
     * JS数据交换格式
     * @version v0.1
     * @author longHP
     */
    public class JsDataTools {
        /**
         * 获取js数据
         * @param 元数据map
         * @return js数据
         */
        public synchronized static String getJsData(Object obj) {
            return createJsData(obj);
        }
        
        /**
         * 生成js数据
         * @param 元数据map
         * @return js数据
         */
        @SuppressWarnings("unchecked")
        public static String createJsData(Object obj) {
            if (null == obj) {
                return "\"\"";
            }
            StringBuffer resultStr = new StringBuffer();
            if (obj instanceof Collection) {    // 集合List、Set等类型
                resultStr.append("[");
                Collection collection = (Collection) obj;
                if (collection.size() > 0) {
                    Object[] collectionObj = collection.toArray();
                    for (int i = 0; i < collectionObj.length; i++) {
                        resultStr.append(createJsData(collectionObj[i]) + ",");
                    }
                    resultStr.deleteCharAt(resultStr.lastIndexOf(","));
                }
                resultStr.append("]");
            } else if (obj instanceof Map) {    // Map类型
                resultStr.append("{");
                Map map = (Map) obj;
                if (map.size() > 0) {
                    Iterator<Entry> iter = map.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = iter.next();
                        String key = entry.getKey().toString();
                        resultStr.append("\"" + key + "\":");    // jquery1.4以上要求双引号包裹
                        Object tempObj = entry.getValue();
                        resultStr.append(createJsData(tempObj) + ",");
                    }
                    resultStr.deleteCharAt(resultStr.lastIndexOf(","));
                }
                resultStr.append("}");
            } else {    // 基本类型
                try {
                    int arrLength = Array.getLength(obj);
                    resultStr.append("[");
                    if (arrLength > 0) {
                        for (int i = 0; i < arrLength; i++) {
                            resultStr.append(createJsData(Array.get(obj, i)) + ",");
                        }
                        resultStr.deleteCharAt(resultStr.lastIndexOf(","));
                    }
                    resultStr.append("]");
                } catch (IllegalArgumentException e) {    // 不是数组,是最基本的数据
                    resultStr.append("\"" + stringToJson(obj + "") + "\"");
                }
            }
            return resultStr.toString();
        }
        
        /**
         * 处理特殊字符
         * @param json字符串
         * @return 处理过的字符串
         */
        public static String stringToJson(String str) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < str.length(); i++) {
                char c = str.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);
                }
            }
            return sb.toString();
        }
        
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
    //        String obj = null;
    //        if (Arrays.asList(obj).get(0) == null) {
    //            System.out.println(Arrays.asList(obj).get(0));
    //        }
    //        String str = "fds";
    //        java.lang.reflect.Array.getLength(str);
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("a", "1");
            map.put("b", "2");
            int[] intArr = {1,2,3};
    //        int[] intArr = new int[0];
    //        System.out.println(intArr.length);
    //        System.out.println(Arrays.asList(intArr).get(0));
    //        java.lang.reflect.Array.getLength(intArr);
            map.put("intArr", intArr);
            Map childMap = new HashMap();
            childMap.put(3, 5);
            childMap.put(7, new HashMap());
            childMap.put(new Object(), intArr);
            map.put("map", childMap);
            List childList = new ArrayList();
            childList.add(true);
            childList.add(new ArrayList());
            childList.add(intArr);
            map.put("list1", childList);
            System.out.println(JsDataTools.getJsData(map));
        }
    }
  • 相关阅读:
    SpringMVC访问静态资源
    tomcat 在linux下的关闭问题
    Mysql中MyISAM、InnoDB两种表类型的区别
    大数据——数据库优化
    for循环 java.lang.OutOfMemoryError: Java heap space
    Tomcat内存溢出的三种情况及解决办法分析
    浅谈eclipse生成的.classpath文件(转)
    深入理解java异常处理机制
    漫步ASP.NET MVC的处理管线
    用 javascript 获取当页面上鼠标(光标)位置
  • 原文地址:https://www.cnblogs.com/guligei/p/9029257.html
Copyright © 2011-2022 走看看