博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Java对JSON字符串进行格式化输出
阅读量:7217 次
发布时间:2019-06-29

本文共 2620 字,大约阅读时间需要 8 分钟。

hot3.png

工作中进行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"		}	}}

 

 

 

 

转载于:https://my.oschina.net/jasonli0102/blog/517052

你可能感兴趣的文章
Linux 系统故障排除
查看>>
我的友情链接
查看>>
Mysql汉子转拼音
查看>>
设置MySQL数据库超时
查看>>
一致性hash算法
查看>>
lua + redis 的去重队列
查看>>
web负载均衡(ipvsadm)(未成)
查看>>
抓取存储quota超过80%的users
查看>>
C语言经典算法100例
查看>>
速成CAD版本转换的教程
查看>>
CAD文件图纸过大,该怎么解决?
查看>>
Spring aop 切不进去原因。。
查看>>
PHP获取客户端IP
查看>>
php开发APP接口-封装通信接口改进版
查看>>
Android系统性能演变历程
查看>>
OSChina 周三乱弹 —— 打醒精神去瞌睡
查看>>
SSH 密钥登录linux
查看>>
你必须掌握的 21 个 Java 核心技术!
查看>>
告诉你WHT中文站是什么?
查看>>
4、Juniper SSG520 PPTP映射到ROS后MAC无法连接解决方法
查看>>