在我们的开发中一定会使用logcat这个工具,每当我们请求一个数据的时候,我们服务器都会返回给我们一个结果,现在居多的是json (至少我的项目)。我们看这些数据很是费劲,之前都是把数据拷贝出来放到格式化工具中格式化一下。现在有了这个方便了很多,直接在logcat里面直接看省事很多。
/**
* json格式化工具
*
* @author fenglikun
*/
public class SanaJsonFormat {
/**
* 默认每次缩进两个空格
*/
private static final String empty = " ";
public static String format(String json) {
try {
int empty = 0;
char[] chs = json.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < chs.length; ) {
//若是双引号,则为字符串,下面if语句会处理该字符串
if (chs[i] == '\"') {
stringBuilder.append(chs[i]);
i++;
//查找字符串结束位置
for (; i < chs.length; ) {
//如果当前字符是双引号,且前面有连续的偶数个\,说明字符串结束
if (chs[i] == '\"' && isDoubleSerialBackslash(chs, i - 1)) {
stringBuilder.append(chs[i]);
i++;
break;
} else {
stringBuilder.append(chs[i]);
i++;
}
}
} else if (chs[i] == ',') {
stringBuilder.append(',').append('\n').append(getEmpty(empty));
i++;
} else if (chs[i] == '{' || chs[i] == '[') {
empty++;
stringBuilder.append(chs[i]).append('\n').append(getEmpty(empty));
i++;
} else if (chs[i] == '}' || chs[i] == ']') {
empty--;
stringBuilder.append('\n').append(getEmpty(empty)).append(chs[i]);
i++;
} else {
stringBuilder.append(chs[i]);
i++;
}
}
return stringBuilder.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return json;
}
}
private static boolean isDoubleSerialBackslash(char[] chs, int i) {
int count = 0;
for (int j = i; j > -1; j--) {
if (chs[j] == '\\') {
count++;
} else {
return count % 2 == 0;
}
}
return count % 2 == 0;
}
/**
* 缩进
*
* @param count
* @return
*/
private static String getEmpty(int count) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < count; i++) {
stringBuilder.append(empty);
}
return stringBuilder.toString();
}
使用:
效果如下: