java实现Json格式美化
2017-12-06 13:56
316 查看
package com.json; /** * 该类提供格式化JSON字符串的方法。 * 该类的方法formatJson将JSON字符串格式化,方便查看JSON数据。 * <p>例如: * </p><p>JSON字符串:["yht","xzj","zwy"] * </p><p>格式化为: * </p><p>[ * </p><p> "yht", * </p><p> "xzj", * </p><p> "zwy" * </p><p>] * * </p><p>使用算法如下: * </p><p>对输入字符串,追个字符的遍历 * </p><p>1、获取当前字符。 * </p><p>2、如果当前字符是前方括号、前花括号做如下处理: * </p><p>(1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。 * </p><p>(2)打印:当前字符。 * </p><p>(3)前方括号、前花括号,的后面必须换行。打印:换行。 * </p><p>(4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。 * </p><p>(5)进行下一次循环。 * </p><p>3、如果当前字符是后方括号、后花括号做如下处理: * </p><p>(1)后方括号、后花括号,的前面必须换行。打印:换行。 * </p><p>(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。 * </p><p>(3)打印:当前字符。 * </p><p>(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。 * </p><p>(5)继续下一次循环。 * </p><p>4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。 * </p><p>5、打印:当前字符。 * */ public class JsonFormatTool { /** * 单位缩进字符串。 */ private static String SPACE = " "; /** * 返回格式化JSON字符串。 * * @param json 未格式化的JSON字符串。 * @return 格式化的JSON字符串。 */ public String formatJson(String json) { StringBuffer result = new StringBuffer(); int length = json.length(); int number = 0; char key = 0; //遍历输入字符串。 for (int i = 0; i < length; i++) { //1、获取当前字符。 key = json.charAt(i); //2、如果当前字符是前方括号、前花括号做如下处理: if((key == '[') || (key == '{') ) { //(1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。 if((i - 1 > 0) && (json.charAt(i - 1) == ':')) { result.append('\n'); result.append(indent(number)); } //(2)打印:当前字符。 result.append(key); //(3)前方括号、前花括号,的后面必须换行。打印:换行。 result.append('\n'); //(4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。 number++; result.append(indent(number)); //(5)进行下一次循环。 continue; } //3、如果当前字符是后方括号、后花括号做如下处理: if((key == ']') || (key == '}') ) { //(1)后方括号、后花括号,的前面必须换行。打印:换行。 result.append('\n'); //(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。 number--; result.append(indent(number)); //(3)打印:当前字符。 result.append(key); //(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。 if(((i + 1) < length) && (json.charAt(i + 1) != ',')) { result.append('\n'); } //(5)继续下一次循环。 continue; } //4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。 if((key == ',')) { result.append(key); result.append('\n'); result.append(indent(number)); continue; } //5、打印:当前字符。 result.append(key); } return result.toString(); } /** * 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。 * * @param number 缩进次数。 * @return 指定缩进次数的字符串。 */ private String indent(int number) { StringBuffer result = new StringBuffer(); for(int i = 0; i < number; i++) { result.append(SPACE); } return result.toString(); } public static void main(String[] args) { JsonFormatTool json = new JsonFormatTool(); String str = "{'age':23,'aihao':['pashan','movies'],'name':{'firstName':'zhang','lastName':'san','aihao':['pashan','movies','name':{'firstName':'zhang','lastName':'san','aihao':['pashan','movies']}]}}"; String result = json.formatJson(str); System.out.println(result); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
运行输出结果
{ 'age':23, 'aihao': [ 'pashan', 'movies' ], 'name': { 'firstName':'zhang', 'lastName':'san', 'aihao': [ 'pashan', 'movies', 'name': { 'firstName':'zhang', 'lastName':'san', 'aihao': [ 'pashan', 'movies' ] } ] } }
相关文章推荐
- java实现Json格式美化【工具包系列】
- GSON实现Java对象与JSON格式对象相互转换的完全教程
- xml和JSON格式相互转换的Java实现
- xml和JSON格式相互转换的Java实现
- java实现json格式的状态码数据
- java实现HTTP的post请求 json格式中文乱码问题
- [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)
- java实现有规律的字符串转Json格式
- java树的一种返回json格式的实现方法
- java实现HTTP的post请求 json格式中文乱码问题
- Json-lib, 实现Java对象与JSON数据格式的互转
- Java 实现字符串String转换List(JSONArray格式)
- java 实现json格式字符串定义
- java实现类似ztree的json格式查询
- Json-lib, 实现Java对象与JSON数据格式的互转
- java 后台实现ajax post跨域请求传递json格式数据获取json数据问题
- JAVA实现json和对象间的相互转换,支持复杂对象格式
- Java实现将ResultSet结果转成json格式
- java实现HTTP的post请求 key-value格式与json格式的区别
- JS实现json格式美化【工具包系列】