您的位置:首页 > 编程语言 > Java开发

用Java对JSON字符串进行格式化输出

2017-05-01 20:06 821 查看
工作中进行http相关接口测试时经常会收到返回的json数据,因为没有格式化输入到控制台后看起来很不直观。

早上写了一个小工具类,对这JSON串进行格式化输出,代替System.out.print

/**
* 格式化输入工具类
*
* @author lizhgb
* @date 2015-10-14
* @Modified 2017-04-28
*
*/
public final class FormatUtil {

/**
* 打印输入到控制台
*
* @param jsonStr
* @author lizhgb
* @Date 2015-10-14 下午1:17:22
*/
public static void printJson(String jsonStr) {
System.out.println(formatJson(jsonStr));
}

/**
* 格式化
*
* @param jsonStr
* @return
* @author lizhgb
* @Date 2015-10-14 下午1:17:35
* @Modified 2017-04-28 下午8:55:35
*/
public static String formatJson(String jsonStr) {
if (null == jsonStr || "".equals(jsonStr))
return "";
StringBuilder sb = new StringBuilder();
char last = '\0';
char current = '\0';
int indent = 0;
boolean isInQuotationMarks = false;
for (int i = 0; i < jsonStr.length(); i++) {
last = current;
current = jsonStr.charAt(i);
switch (current) {
case '"':
if (last != '\\'){
isInQuotationMarks = !isInQuotationMarks;
}
sb.append(current);
break;
case '{':
case '[':
sb.append(current);
if (!isInQuotationMarks) {
sb.append('\n');
indent++;
addIndentBlank(sb, indent);
}
break;
case '}':
case ']':
if (!isInQuotationMarks) {
sb.append('\n');
indent--;
addIndentBlank(sb, indent);
}
sb.append(current);
break;
case ',':
sb.append(current);
if (last != '\\' && !isInQuotationMarks) {
sb.append('\n');
addIndentBlank(sb, indent);
}
break;
default:
sb.append(current);
}
}

return sb.toString();
}

/**
* 添加space
*
* @param sb
* @param indent
* @author lizhgb
* @Date 2015-10-14 上午10:38:04
*/
private static void addIndentBlank(StringBuilder sb, int indent) {
for (int i = 0; i < indent; i++) {
sb.append('\t');
}
}
}


测试:

@Test
public void jsonPrintTest2() {

String str = "{\"content\":\"this is the msg content.\",\"tousers\":\"user1|user2\",\"msgtype\":\"texturl\",\"appkey\":\"test\",\"domain\":\"test\","
+ "\"system\":{\"wechat\":{\"safe\":\"1\"}},\"texturl\":{\"urltype\":\"0\",\"user1\":{\"spStatus\":\"user01\",\"workid\":\"work01\"},\"user2\":{\"spStatus\":\"user02\",\"workid\":\"work02\"}}}";
FormatUtil.printJson(str);
}


输出:

{
"content":"this is the msg content.",
"tousers":"user1|user2",
"msgtype":"texturl",
"appkey":"test",
"domain":"test",
"system":{
"wechat":{
"safe":"1"
}
},
"texturl":{
"urltype":"0",
"user1":{
"spStatus":"user01",
"workid":"work01"
},
"user2":{
"spStatus":"user02",
"workid":"work02"
}
}
}


转自:

https://my.oschina.net/jasonli0102/blog/517052?p={{page}}#comment-list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 格式化