java写JSON格式化的方法

来源:互联网 发布:网络协议的四层模型 编辑:程序博客网 时间:2024/04/30 18:53

貌似大家都用beJson等第三方来格式化,而且实现的很好,所以不需要自己写了,而且没有写的时候回认为很难写,但是我心血来潮想写就写,其实花不了多少时间,一个小时左右就写完了。用System.out.println打印的话格式化很不错,或者Android的TextView和EditText也可以,但是不能格式化在Log打印里,原因是Android的Log打印太多,估计人家设计的时候,Log打印时把格式化好的文字都给压缩紧凑了。
好了,思路是什么样的呢?很好理解,遍历整个字符串,用StringBuffer或者StringBuilder添加源字符串的字符,当遇到”{” 或 “[” 的时候我们就换号并缩进,用一个变量来记录缩进个数,然后append记录的个数个\t,当遇到 “]” 或 “}” 时,缩进个数减1,并换行,遇到“,”时,也换行,缩进个数不变,最后把StringBuffer的数据返回就是格式化的结果了。

    /**     * 格式化json     * @param content     * @return     */    public static String formatJson(String content) {        StringBuffer sb = new StringBuffer();        int index = 0;        int count = 0;        while(index < content.length()){            char ch = content.charAt(index);            if(ch == '{' || ch == '['){                sb.append(ch);                sb.append('\n');                count++;                for (int i = 0; i < count; i++) {                                       sb.append('\t');                }            }            else if(ch == '}' || ch == ']'){                sb.append('\n');                count--;                for (int i = 0; i < count; i++) {                                       sb.append('\t');                }                sb.append(ch);            }             else if(ch == ','){                sb.append(ch);                sb.append('\n');                for (int i = 0; i < count; i++) {                                       sb.append('\t');                }            }             else {                sb.append(ch);                          }            index ++;        }        return sb.toString();    }    /**     * 把格式化的json紧凑     * @param content     * @return     */    public static String compactJson(String content) {        String regEx="[\t\n]";         Pattern p = Pattern.compile(regEx);         Matcher m = p.matcher(content);        return m.replaceAll("").trim();    }
0 0