平常我们用OkHttp请求后响应的json数据杂乱不堪没有格式不容易看清晰 如下
image.png
我写了一个格式化校验的工具类在输出日志的时候调用 使用效果如下
image.png
/**
* 将字符串格式化成 JSON 格式
*/
static String formatJson(String json) {
if (json == null) {
return "";
}
// 计数tab的个数
int tabNum = 0;
StringBuilder builder = new StringBuilder();
int length = json.length();
char last = 0;
for (int i = 0; i < length; i++) {
char c = json.charAt(i);
if (c == '{') {
tabNum++;
builder.append(c).append("\n")
.append(getSpaceOrTab(tabNum));
} else if (c == '}') {
tabNum--;
builder.append("\n")
.append(getSpaceOrTab(tabNum))
.append(c);
} else if (c == ',') {
builder.append(c).append("\n")
.append(getSpaceOrTab(tabNum));
} else if (c == ':') {
if (i > 0 && json.charAt(i - 1) == '"') {
builder.append(c).append(" ");
} else {
builder.append(c);
}
} else if (c == '[') {
tabNum++;
char next = json.charAt(i + 1);
if (next == ']') {
builder.append(c);
} else {
builder.append(c).append("\n")
.append(getSpaceOrTab(tabNum));
}
} else if (c == ']') {
tabNum--;
if (last == '[') {
builder.append(c);
} else {
builder.append("\n").append(getSpaceOrTab(tabNum)).append(c);
}
} else {
builder.append(c);
}
last = c;
}
return builder.toString();
}
/**
* 创建对应数量的制表符
*/
static String getSpaceOrTab(int tabNum) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < tabNum; i++) {
sb.append('\t');
}
return sb.toString();
}
网友评论