JSON字符串格式化输出到文件

因业务需要,现要把后台的Json字符串转换为文件,且格式要有层次感,且便于阅读。网上有些方案是根据符号来进行缩进换行,奈何本人推崇简洁(懒)。后在此篇https://www.cnblogs.com/liujiale/p/10937574.html,寻得灵感,效果不错,特此分享。

		//json字符串
		String json = "{\"code\": 200, \"success\": true,\"data\": [{\"key\":\"111\"},{\"key\":\"222\"}]}";
		
		//将其包装为html
		StringBuilder sb = new StringBuilder();
		sb.append("<!DOCTYPE html><html lang=\"en\">")
			.append("<head><meta charset=\"UTF-8\"></head>")
			.append("<body><pre id=\"data\"></pre>")
			.append("<script type=\"text/javascript\">")
			.append("var text ='").append(json).append("';")
			.append("document.getElementById('data').innerText= JSON.stringify(JSON.parse(text), null, 2);")
			.append("</script></body></html>");
		
		//导出到文件中
		File file = new File("D:/json.html");
		try {
			file.createNewFile();
			FileWriter writer = new FileWriter(file);
			writer.write(sb.toString());
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

生成的文件中HTML代码如下:

<!DOCTYPE html>
<html lang="en">
 <head> 
  <meta charset="UTF-8" /> 
 </head> 
 <body> 
  <pre id="data"></pre> 
  <script type="text/javascript">
  var text ='{"code": 200, "success": true,"data": [{"key":"111"},{"key":"222"}]}';
  document.getElementById('data').innerText= JSON.stringify(JSON.parse(text), null, 2);
  </script>  
 </body>
</html>

效果如下图:
在这里插入图片描述
附上另一种方法,不管是输出到控制台还是输出到文件,都是格式化的文件。
参考地址:Json字符串控制台格式化输出java

    private String responseFormat(String json){
        StringBuffer jsonStr = new StringBuffer();
        int level = 0;
        for(int index = 0, len = json.length(); index < len; index++) {//将字符串中的字符逐个按行输出
            //获取s中的每个字符
            char c = json.charAt(index);
            //level大于0并且jsonForMatStr中的最后一个字符为\n,jsonForMatStr加入\t
            if (level > 0  && '\n' == jsonStr.charAt(jsonStr.length() - 1)) {
                jsonStr.append(getLevelStr(level));
            }
            //遇到"{"和"["要增加空格和换行,遇到"}"和"]"要减少空格,遇到","要换行
            switch (c) {
                case '{':
                case '[':
                    jsonStr.append(c + "\n");
                    level++;
                    break;
                case ',':
                    jsonStr.append(c + "\n");
                    break;
                case '}':
                case ']':
                    jsonStr.append("\n");
                    level--;
                    jsonStr.append(getLevelStr(level));
                    jsonStr.append(c);
                    break;
                default:
                    jsonStr.append(c);
                    break;
            }
        }
        return jsonStr.toString();
    }

    private String getLevelStr(int level) {
        StringBuffer levelStr = new StringBuffer();
        for (int levelI = 0; levelI < level; levelI++) {
            levelStr.append("\t");
        }
        return levelStr.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值