思路同上一篇文章(xml格式化) ,稍有变化
/**
* 格式化JSON字符串
*/
public static String formatJson(String originStr) {
if (originStr == null) {
return null;
}
char[] charArray = originStr.toCharArray();
StringBuilder sb = new StringBuilder();
int tabCount = 0;
// 可以不用stack,在满足 '}' 的if语句内更换 int temp = tabCount-1即可
Stack<Integer> stack = new Stack<>();
char c;
for (int i = 0; i < charArray.length; i++) {
c = charArray[i];
// 换行
if (c == '{') {
enterAndTabs(sb, tabCount);
stack.push(tabCount++);
sb.append(c);
continue;
}
// 换行
if (c == '"'
&& (charArray[i - 1] == '{' || charArray[i - 1] == ',')) {
enterAndTabs(sb, tabCount);
sb.append(c);
continue;
}
// 换行
if (c == '}') {
enterAndTabs(sb, stack.pop());
sb.append(c);
tabCount--;
continue;
}
sb.append(c);
}
return sb.toString();
}
/**
* 回车与制表符
*
* @param sb StringBuilder
* @param tabCount 多少个制表符
*/
private static void enterAndTabs(StringBuilder sb, int tabCount) {
sb.append("\n");
while (tabCount-- > 0) {
sb.append(" ");
}
}