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

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

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

package MyTest;

/**

* 格式化输入工具类

*

* @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"

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值