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
