生成 JSON 字符串的工具
1
//
生成JSON字符串工具
2
import
java.util.ArrayList;
3
import
java.util.Iterator;
4
import
java.util.LinkedHashMap;
5
import
java.util.List;
6
import
java.util.Map;
7![]()
8![]()
/** */
/**
9
* JSON utility class
10
*
11
* @since 2008-04-21
12
*/
13![]()
public
class
Json
{
14![]()
15
// test
16![]()
public static void main(String[] args)
{
17
Json json1 = new Json();
18
json1.add("totalCount", 2);
19
json1.add("isTest", true);
20
21
Json json_a = new Json();
22
json_a.add("menuid", 1);
23
json_a.add("menuname", "testmenu");
24
json1.add("topics", json_a);
25
26
Json json_b = new Json();
27
json_b.add("menuid", 2);
28
json_b.add("menuname", "testmenu");
29
json1.add("topics", json_b);
30
System.out.println(json1.toString());
31
}
32![]()
33
private Map map = new LinkedHashMap();
34![]()
35![]()
/** *//**
36
* 添加一个 JSON 属性,值为一个字符串,重复添加时产生数组<p/>
37
*
38
* add("name", "value");<br/>
39
* 添加一个字符串,产生的 JSON 如:{"name":"value"}<p/>
40
*
41
* add("name", "value1");<br/>
42
* add("name", "value2");<br/>
43
* 添加两个同属性的字符串,产生的 JSON 如:{"name":["value1", "value2"]}<p/>
44
*
45
* @param key JSON 属性名
46
* @param str 字符串格式的属性值
47
*/
48![]()
public void add(String key, String value)
{
49
addElement(key, value);
50
}
51
52![]()
public void add(String key, int num)
{
53
addElement(key, new Integer(num));
54
}
55
56![]()
public void add(String key, boolean b)
{
57
addElement(key, new Boolean(b));
58
}
59![]()
60![]()
/** *//**
61
* 添加一个 JSON 属性,值为一个 JSON,重复添加时产生 JSON 数组<p/>
62
*
63
* Json json1 = new Json();<br/>
64
* json1.add("name1", "value1");<br/>
65
* json1.add("name2", "value2");<br/>
66
* Json json = new Json();<br/>
67
* json.add("message", json1);<br/>
68
* 添加一个 JSON,产生的 JSON 如:{"message":{"name1":"value1", "name2":"value2"}}<p/>
69
*
70
* Json json1 = new Json();<br/>
71
* json1.add("name1", "value1");<br/>
72
* json1.add("name2", "value2");<br/>
73
* Json json2 = new Json();<br/>
74
* json2.add("name1", "value3");<br/>
75
* json2.add("name2", "value4");<br/>
76
* Json json = new Json();<br/>
77
* json.add("message", json1);<br/>
78
* json.add("message", json2);<br/>
79
* 添加两个同属性的 JSON,产生的 JSON 如:{"message":[{"name1":"value1", "name2":"value2"}, {"name1":"value3", "name2":"value4"}]}<p/>
80
*
81
* @param key JSON 属性名
82
* @param json JSON 格式的属性值
83
*/
84![]()
public void add(String key, Json json)
{
85
addElement(key, json);
86
}
87![]()
88![]()
public String toString()
{
89
StringBuilder sb = new StringBuilder();
90
sb.append("{");
91
int k = 0;
92![]()
for (Iterator i = map.keySet().iterator(); i.hasNext();)
{
93
String key = (String)(i.next());
94
Object obj = map.get(key);
95![]()
if (k > 0)
{
96
sb.append(",");
97
}
98
appendKey(sb, key);
99![]()
if (obj instanceof String)
{
100
appendString(sb, (String)obj);
101![]()
} else if (obj instanceof List)
{
102
appendList(sb, (List)obj);
103![]()
} else if (obj instanceof Json)
{
104
appendJson(sb, (Json)obj);
105![]()
} else
{
106
appendOther(sb, obj);
107
}
108
k++;
109
}
110
sb.append("}");
111
return sb.toString();
112
}
113![]()
114![]()
private void addElement(String key, Object obj)
{
115![]()
if (!map.containsKey(key))
{
116![]()
if(obj instanceof Json)
{
117
List list = new ArrayList();
118
list.add(obj);
119
map.put(key, list);
120![]()
} else
{
121
map.put(key, obj);
122
}
123
return;
124
}
125![]()
126
Object o = map.remove(key);
127![]()
128![]()
if (o instanceof List)
{
129
((List)o).add(obj);
130
map.put(key, o);
131
return;
132
}
133![]()
134
// o is a String
135
List list = new ArrayList();
136
list.add(o);
137
list.add(obj);
138
map.put(key, list);
139
}
140![]()
141![]()
/** *//**
142
* Append JSON property name
143
*
144
* @param sb
145
* @param key
146
*/
147![]()
private void appendKey(StringBuilder sb, String key)
{
148
sb.append("\"").append(key).append("\":");
149
}
150![]()
151![]()
/** *//**
152
* Append JSON property value that is a String
153
*
154
* @param sb
155
* @param str
156
*/
157![]()
private void appendString(StringBuilder sb, String str)
{
158
sb.append("\"").append(str).append("\"");
159
}
160
161![]()
/** *//**
162
* Append JSON property value that is a Integer
163
*
164
* @param sb
165
* @param num
166
*/
167![]()
private void appendOther(StringBuilder sb, Object obj)
{
168
sb.append(obj);
169
}
170![]()
171![]()
/** *//**
172
* Append JSON property value that is a List
173
*
174
* @param sb
175
* @param list
176
*/
177![]()
private void appendList(StringBuilder sb, List list)
{
178
sb.append("[");
179![]()
for (int j = 0, m = list.size(); j < m; j++)
{
180![]()
if (j > 0)
{
181
sb.append(",");
182
}
183
Object obj = list.get(j);
184![]()
if (obj instanceof String)
{
185
appendString(sb, (String)obj);
186![]()
} else if (obj instanceof Json)
{
187
appendJson(sb, (Json)obj);
188![]()
} else
{
189
appendOther(sb, obj);
190
}
191
}
192
sb.append("]");
193
}
194![]()
195![]()
/** *//**
196
* Append JSON property value that is a JSON
197
*
198
* @param sb
199
* @param json
200
*/
201![]()
private void appendJson(StringBuilder sb, Json json)
{
202
sb.append(json.toString());
203
}
204
}
205
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

148
149
150
151
152
153
154
155
156
157

158
159
160
161
162
163
164
165
166
167

168
169
170
171
172
173
174
175
176
177

178
179

180

181
182
183
184

185
186

187
188

189
190
191
192
193
194
195
196
197
198
199
200
201

202
203
204
205