貌似大家都用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();
}