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
posted on 2008-07-23 17:22
scea2009 阅读(4958)
评论(2) 编辑 收藏