格式化json字符串按照json格式显示:换行、缩进显示
public class JsonFormatter {
public static String format(String jsonStr){
if (StringUtils.isEmpty(jsonStr)) {
return "";
}
try {
ByteArrayInputStream in = new ByteArrayInputStream(jsonStr.getBytes());
ByteArrayOutputStream out = new ByteArrayOutputStream();
char preCh = ' ';
char ch;
int read;
int tb=0;
while((read = in.read()) > 0){
ch = (char)read;
switch (ch){
case '{': {
tb = outputAndRightMove(tb, ch, out, preCh);
break;
}
case '[': {
out.write(ch);
tb += 1;
break;
}
case '}': {
tb = outputAndLeftMove(tb, ch, out);
break;
}
case ']': {
tb = outputAndLeftMove(tb, ch, out);
break;
}
case ',': {
out.write(ch);
outputNewline(out);
out.write(getBlankingStringBytes(tb));
break;
}
default: {
out.write(ch);
break;
}
}
preCh = ch;
}
return out.toString();
} catch (IOException e){
e.printStackTrace();
}
return null;
}
public static int outputAndRightMove(int tb, char ch, ByteArrayOutputStream out, char preCh) throws IOException {
if (preCh != ':' && preCh != ',') {
//换行
outputNewline(out);
}
if ((preCh != ',' && ch != '{') || (preCh == '[' && ch == '{')) {
//向右缩进
out.write(getBlankingStringBytes(tb));
}
out.write(ch);
outputNewline(out);
tb += 1;
//再向右缩进多四个字符
out.write(getBlankingStringBytes(tb));
return tb;
}
public static int outputAndLeftMove(int tb, char ch, ByteArrayOutputStream out) throws IOException{
outputNewline(out);
tb -= 1;
out.write(getBlankingStringBytes(tb));
out.write(ch);
return tb;
}
public static byte[] getBlankingStringBytes(int tb){
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < tb; i++) {
sb.append("\t");
}
return sb.toString().getBytes();
}
public static void outputNewline(ByteArrayOutputStream out){
out.write('\n');
}
}