001
/**
002
* @Title JSONUtils.java
003
* @Package com.fbtt.site.utils
004
* @author huangsm
005
* @email huangsanm@gmail.com
006
* @date 2011-7-22 下午02:50:42
007
* @remark
008
* @version V1.0
009
*/
010
package com.fbtt.axst.utils;
011
012
import java.beans.PropertyDescriptor;
013
import java.sql.Date;
014
import java.util.List;
015
import java.util.Map;
016
017
import org.apache.commons.beanutils.PropertyUtils;
018
019
/**
020
* @ClassName: JSONUtils
021
* @author huangsm
022
* @date 2011-7-22 下午02:50:42
023
* @remark
024
*/
025
public class JSONUtils {
026
027
public static String stringToJson(String s) {
028
if (s == null) {
029
return nullTOJson();
030
}
031
StringBuilder sb = new StringBuilder();
032
for (int i = 0; i < s.length(); i++) {
033
char ch = s.charAt(i);
034
switch (ch) {
035
case '"':
036
sb.append("\\\"");
037
break;
038
case '\\':
039
sb.append("\\\\");
040
break;
041
case '\b':
042
sb.append("\\b");
043
break;
044
case '\f':
045
sb.append("\\f");
046
break;
047
case '\n':
048
sb.append("\\n");
049
break;
050
case '\r':
051
sb.append("\\r");
052
break;
053
case '\t':
054
sb.append("\\t");
055
break;
056
case '/':
057
sb.append("\\/");
058
break;
059
default:
060
if (ch >= '\u0000' && ch <= '\u001F') {
061
String ss = Integer.toHexString(ch);
062
sb.append("\\u");
063
for (int k = 0; k < 4 – ss.length(); k++) {
064
sb.append('0');
065
}
066
sb.append(ss.toUpperCase());
067
} else {
068
sb.append(ch);
069
}
070
}
071
}
072
return sb.toString();
073
}
074
/***
075
* 對象轉換成為json
076
* 這裡是描述這個方法的作用
077
* @return
078
* @author Java
079
* @date 2011-7-22 下午02:59:13
080
*/
081
public static String objectToJson(Object obj){
082
StringBuffer json = new StringBuffer();
083
if (obj == null) {
084
json.append("\"\"");
085
} else if (obj instanceof Integer) {
086
json.append("\"").append(numberToJson((Integer)obj)).append("\"");
087
} else if (obj instanceof Boolean) {
088
json.append("\"").append(booleanToJson((Boolean)obj)).append("\"");
089
} else if (obj instanceof String) {
090
json.append("\"").append(stringToJson(obj.toString())).append("\"");
091
} else if (obj instanceof Object[]) {
092
json.append("\"").append(arrayToJson((Object[])obj)).append("\"");
093
} else if (obj instanceof List) {
094
json.append("\"").append(listToJson((List<?>)obj)).append("\"");
095
} else if (obj instanceof Map) {
096
json.append("\"").append(mapToJson((Map<?, ?>)obj)).append("\"");
097
} else if(obj instanceof java.sql.Date){
098
json.append("\"").append(dateToJson((Date)obj)).append("\"");
099
} else if(obj instanceof java.util.Date){
100
json.append("\"").append(dateToJson((Date)obj)).append("\"");
101
} else {
102
json.append("\"").append(stringToJson(obj.toString())).append("\"");
103
}
104
return json.toString();
105
}
106
107
/**
108
* 這裡是描述這個方法的作用
109
* @param obj
110
* @return {["pname":"val"],["pname":"val"]…}
111
* @author Java
112
* @date 2011-7-22 下午03:02:49
113
*/
114
public static String beanToJson(Object obj) {
115
StringBuffer json = new StringBuffer("{");
116
try {
117
PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(obj);
118
if(pds != null && pds.length > 0){
119
for (PropertyDescriptor pd : pds) {
120
if(pd.getName().equals("class"))
121
continue;
122
String pname = objectToJson(pd.getName());
123
String val = objectToJson(pd.getReadMethod().invoke(obj));
124
json.append(pname);
125
json.append(":");
126
json.append(val);
127
json.append(",");
128
}
129
json.setCharAt(json.length() – 1, '}');
130
}else{
131
json.append("}");
132
}
133
} catch (Exception e) {
134
e.printStackTrace();
135
}
136
return json.toString();
137
}
138
139
public static String beanToJson(Object obj, String params) {
140
StringBuffer json = new StringBuffer("{");
141
try {
142
PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(obj);
143
if(pds != null && pds.length > 0){
144
for (PropertyDescriptor pd : pds) {
145
String pname = pd.getName();
146
if(pname.equals("class"))
147
continue;
148
if(params.indexOf(pname) == -1)
149
continue;
150
pname = objectToJson(pname);
151
String val = objectToJson(pd.getReadMethod().invoke(obj));
152
json.append(pname);
153
json.append(":");
154
json.append(val);
155
json.append(",");
156
}
157
json.setCharAt(json.length() – 1, '}');
158
}else{
159
json.append("}");
160
}
161
} catch (Exception e) {
162
e.printStackTrace();
163
}
164
return json.toString();
165
}
166
167
168
/**
169
* 這裡是描述這個方法的作用
170
* @param obj
171
* @return
172
* @see
173
* @author Java
174
* @date 2011-7-22 下午03:02:27
175
*/
176
public static String mapToJson(Map<?, ?> map) {
177
StringBuilder json = new StringBuilder();
178
json.append("{");
179
if (map != null && map.size() > 0) {
180
for (Object key : map.keySet()) {
181
json.append("" + objectToJson(key) + "");
182
json.append(":");
183
json.append("" + objectToJson(map.get(key)) + "");
184
json.append(",");
185
}
186
json.setCharAt(json.length() – 1, '}');
187
} else {
188
json.append("}");
189
}
190
return json.toString();
191
}
192
193
/**
194
* 這裡是描述這個方法的作用
195
* @param obj
196
* @return
197
* @author Java
198
* @date 2011-7-22 下午03:02:15
199
*/
200
public static String listToJson(List<?> list) {
201
StringBuffer json = new StringBuffer();
202
json.append("[");
203
if (list != null && list.size() > 0) {
204
for (Object obj : list) {
205
json.append(beanToJson(obj));
206
json.append(",");
207
}
208
json.setCharAt(json.length() – 1, ']');
209
} else {
210
json.append("]");
211
}
212
return json.toString();
213
}
214
215
public static String listToJson(List<?> list, String params) {
216
StringBuffer json = new StringBuffer();
217
json.append("[");
218
if (list != null && list.size() > 0) {
219
for (Object obj : list) {
220
json.append(beanToJson(obj, params));
221
json.append(",");
222
}
223
json.setCharAt(json.length() – 1, ']');
224
} else {
225
json.append("]");
226
}
227
return json.toString();
228
}
229
230
/**
231
* 這裡是描述這個方法的作用
232
* @param obj
233
* @return
234
* @see
235
* @author Java
236
* @date 2011-7-22 下午03:02:05
237
*/
238
private static String arrayToJson(Object[] array) {
239
StringBuilder json = new StringBuilder();
240
json.append("{");
241
if (array != null && array.length > 0) {
242
for (Object obj : array) {
243
json.append(objectToJson(obj));
244
json.append(",");
245
}
246
json.setCharAt(json.length() – 1, ']');
247
} else {
248
json.append("}");
249
}
250
return json.toString();
251
}
252
253
public static String dateToJson(Date date){
254
return date.toString();
255
}
256
257
public static String numberToJson(Number number) {
258
return number.toString();
259
}
260
261
public static String booleanToJson(Boolean bool) {
262
return bool.toString();
263
}
264
265
public static String nullTOJson(){
266
return "";
267
}
268
/**
269
* 非空驗證
270
* 這裡是描述這個方法的作用
271
* @param arg0
272
* @return
273
* @author Java
274
* @date 2011-7-22 下午02:51:43
275
*/
276
public static Boolean isNull(Object arg0){
277
if(arg0 == null) return true;
278
String arg = (String) arg0;
279
return ("".equals(arg.trim()) || "null".equals(arg)) ? true : false;
280
}
281
}
有的方法有重構,其中多瞭一個參數,其中這個參數的作用是當你一個類有的字段不需要轉換的時候,你隻需把需要轉換的字段屬性通過逗號分隔傳入就可以瞭!
作者“緣敘的博客”