简单json格式化
来源:互联网 发布:购买淘宝实名认证账号 编辑:程序博客网 时间:2024/06/08 17:55
最近和一个第三方的系统对接,需要把他们的请求参数保存下来,但是那一长串的json不好读,于是想格式化一下,这种工具有很多,但我想自己弄个来玩下。
刚开始的实现用了很多判断,逻辑很绕。后来想起之前读过一个模板引擎的源码,里面用了状态图,于是我也尝试用了下。
public class Main { private static String NEW_LINE = "\r\n"; public static void main(String[] args) { String json = "[{\"name\": \"wen\",\"age\": 12,\"flag\": true,\"job\": [{\"name\":\"java\"},{\"name\": \"c++\"}]},{\"name\": \"yun\",\"age\": 13,\"flag\": false}]"; System.out.println(format(json)); } private static String format(String json) { // 去除原来的格式 json = json.replace("\n", "").replace("\r", "").replace("\t", ""); StringBuilder sb = new StringBuilder(); int prevStatus = 0;// 上一状态 int level = 0;// 缩进层级 for (char c : json.toCharArray()) { int oper = getOperation(prevStatus, c); switch (oper) { case 1: sb.append(NEW_LINE).append(getTab(level)); break; case 2: level++; sb.append(NEW_LINE).append(getTab(level)); break; case 3: level--; sb.append(NEW_LINE).append(getTab(level)); break; case 4: sb.append(' '); break; } sb.append(c); prevStatus = getStatus(c); } return sb.toString(); } // 返回:0直接输出,1换行,2增加缩进并换行,3减少缩进并换行,4前面加空格 private static int[][] statusArr = new int[][] { {0, 0, 0, 0, 0, 3}, // 普通字符 {1, 2, 2, 0, 0, 0}, // {[ {2, 0, 4, 0, 0, 0}, // : {3, 1, 4, 0, 0, 0}, // , {4, 0, 0, 0, 0, 3},};// }] // 根据前一状态和当前字符决定操作 private static int getOperation(int status, char c) { return statusArr[status][getStatus(c) + 1]; } // 字符转换成对应状态 private static int getStatus(char c) { int status = 0; switch (c) { case '{': case '[': status = 1; break; case ':': status = 2; break; case ',': status = 3; break; case '}': case ']': status = 4; break; } return status; } // 缩进 private static String getTab(int level) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < level; i++) { sb.append(" "); } return sb.toString(); }}
执行结果
[ { "name": "wen", "age": 12, "flag": true, "job": [ { "name":"java" }, { "name": "c++" } ] }, { "name": "yun", "age": 13, "flag": false }]
阅读全文
0 0
- 简单json格式化
- Json 格式化
- json格式化
- json 格式化
- json格式化
- JSON格式化
- 格式化json
- JSON.stringify格式化Json字符串
- json格式化日期方法
- JSON校验格式化工具
- Json 格式化转换
- jsonformatter json格式化 Android
- jsonformatter json格式化 Android
- JSON格式化各种数据类型
- json格式化代码;
- JSON格式化工具。
- javascript 格式化 json字符串
- json日期格式化
- 吴恩达神经网络和深度学习课程自学笔记(四)之深层神经网络
- 将github中的项目关联到AndroidStudio
- 编程小白的自述
- POJ 1573.Robot Motion
- 2017-08-21-myeclipse-没有部署文件到tomcat的webapps目录下
- 简单json格式化
- 2015-2016 Northwestern European Regional Contest (NWERC 2015) E. Elementary Math
- Spark调优
- 初窥javaScrit权威指南,第三章类型、值和变量(1)
- HTML布局标记与列表标记
- centos7搭建ceph
- CentOS启动nginx出现nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or director)
- 欢迎使用CSDN-markdown编辑器
- 封装服务提供者框架