Json与javaBean之间的转换工具类
001 | import java.lang.reflect.Field; |
002 | import java.util.ArrayList; |
003 | import java.util.HashMap; |
004 | import java.util.Iterator; |
005 | import java.util.List; |
006 | import java.util.Map; |
007 | import java.util.Set; |
008 | |
009 | import net.sf.json.JSONArray; |
010 | import net.sf.json.JSONObject; |
011 | import net.sf.json.JsonConfig; |
012 | |
013 | /** |
014 | * Json与javaBean之间的转换工具类 |
015 | * |
016 | * @author 晚风工作室 www.soservers.com |
017 | * @version 20111221 |
018 | * |
019 | * {@code 现使用json-lib组件实现 |
020 | * 需要 |
021 | * json-lib-2.4-jdk15.jar |
022 | * ezmorph-1.0.6.jar |
023 | * commons-collections-3.1.jar |
024 | * commons-lang-2.0.jar |
025 | * 支持 |
026 | * } |
027 | */ |
028 | public class JsonPluginsUtil { |
029 | |
030 | |
031 | /** |
032 | * 从一个JSON 对象字符格式中得到一个java对象 |
033 | * |
034 | * @param jsonString |
035 | * @param beanCalss |
036 | * @return |
037 | */ |
038 | @SuppressWarnings ( "unchecked" ) |
039 | public static <T> T jsonToBean(String jsonString, Class<T> beanCalss) { |
040 | |
041 | JSONObject jsonObject = JSONObject.fromObject(jsonString); |
042 | T bean = (T) JSONObject.toBean(jsonObject, beanCalss); |
043 | |
044 | return bean; |
045 | |
046 | } |
047 | |
048 | /** |
049 | * 将java对象转换成json字符串 |
050 | * |
051 | * @param bean |
052 | * @return |
053 | */ |
054 | public static String beanToJson(Object bean) { |
055 | |
056 | JSONObject json = JSONObject.fromObject(bean); |
057 | |
058 | return json.toString(); |
059 | |
060 | } |
061 | |
062 | /** |
063 | * 将java对象转换成json字符串 |
064 | * |
065 | * @param bean |
066 | * @return |
067 | */ |
068 | public static String beanToJson(Object bean, String[] _nory_changes, boolean nory) { |
069 | |
070 | JSONObject json = null ; |
071 | |
072 | if (nory){ //转换_nory_changes里的属性 |
073 | |
074 | Field[] fields = bean.getClass().getDeclaredFields(); |
075 | String str = "" ; |
076 | for (Field field : fields){ |
077 | // System.out.println(field.getName()); |
078 | str+=( ":" +field.getName()); |
079 | } |
080 | fields = bean.getClass().getSuperclass().getDeclaredFields(); |
081 | for (Field field : fields){ |
082 | // System.out.println(field.getName()); |
083 | str+=( ":" +field.getName()); |
084 | } |
085 | str+= ":" ; |
086 | for (String s : _nory_changes){ |
087 | str = str.replace( ":" +s+ ":" , ":" ); |
088 | } |
089 | json = JSONObject.fromObject(bean,configJson(str.split( ":" ))); |
090 | |
091 | } else { //转换除了_nory_changes里的属性 |
092 | |
093 | |
094 | |
095 | json = JSONObject.fromObject(bean,configJson(_nory_changes)); |
096 | } |
097 | |
098 | |
099 | |
100 | return json.toString(); |
101 | |
102 | } |
103 | private static JsonConfig configJson(String[] excludes) { |
104 | |
105 | JsonConfig jsonConfig = new JsonConfig(); |
106 | |
107 | jsonConfig.setExcludes(excludes); |
108 | // |
109 | jsonConfig.setIgnoreDefaultExcludes( false ); |
110 | // |
111 | // jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); |
112 | |
113 | // jsonConfig.registerJsonValueProcessor(Date.class, |
114 | // |
115 | // new DateJsonValueProcessor(datePattern)); |
116 | |
117 | |
118 | |
119 | return jsonConfig; |
120 | |
121 | } |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | /** |
128 | * 将java对象List集合转换成json字符串 |
129 | * @param beans |
130 | * @return |
131 | */ |
132 | @SuppressWarnings ( "unchecked" ) |
133 | public static String beanListToJson(List beans) { |
134 | |
135 | StringBuffer rest = new StringBuffer(); |
136 | |
137 | rest.append( "[" ); |
138 | |
139 | int size = beans.size(); |
140 | |
141 | for ( int i = 0 ; i < size; i++) { |
142 | |
143 | rest.append(beanToJson(beans.get(i))+((i<size- 1 )? "," : "" )); |
144 | |
145 | } |
146 | |
147 | rest.append( "]" ); |
148 | |
149 | return rest.toString(); |
150 | |
151 | } |
152 | |
153 | /** |
154 | * |
155 | * @param beans |
156 | * @param _no_changes |
157 | * @return |
158 | */ |
159 | @SuppressWarnings ( "unchecked" ) |
160 | public static String beanListToJson(List beans, String[] _nory_changes, boolean nory) { |
161 | |
162 | StringBuffer rest = new StringBuffer(); |
163 | |
164 | rest.append( "[" ); |
165 | |
166 | int size = beans.size(); |
167 | |
168 | for ( int i = 0 ; i < size; i++) { |
169 | try { |
170 | rest.append(beanToJson(beans.get(i),_nory_changes,nory)); |
171 | if (i<size- 1 ){ |
172 | rest.append( "," ); |
173 | } |
174 | } catch (Exception e){ |
175 | e.printStackTrace(); |
176 | } |
177 | } |
178 | |
179 | rest.append( "]" ); |
180 | |
181 | return rest.toString(); |
182 | |
183 | } |
184 | |
185 | /** |
186 | * 从json HASH表达式中获取一个map,改map支持嵌套功能 |
187 | * |
188 | * @param jsonString |
189 | * @return |
190 | */ |
191 | @SuppressWarnings ({ "unchecked" }) |
192 | public static Map jsonToMap(String jsonString) { |
193 | |
194 | JSONObject jsonObject = JSONObject.fromObject(jsonString); |
195 | Iterator keyIter = jsonObject.keys(); |
196 | String key; |
197 | Object value; |
198 | Map valueMap = new HashMap(); |
199 | |
200 | while (keyIter.hasNext()) { |
201 | |
202 | key = (String) keyIter.next(); |
203 | value = jsonObject.get(key).toString(); |
204 | valueMap.put(key, value); |
205 | |
206 | } |
207 | |
208 | return valueMap; |
209 | } |
210 | |
211 | /** |
212 | * map集合转换成json格式数据 |
213 | * @param map |
214 | * @return |
215 | */ |
216 | public static String mapToJson(Map<String, ?> map, String[] _nory_changes, boolean nory){ |
217 | |
218 | String s_json = "{" ; |
219 | |
220 | Set<String> key = map.keySet(); |
221 | for (Iterator<?> it = key.iterator(); it.hasNext();) { |
222 | String s = (String) it.next(); |
223 | if (map.get(s) == null ){ |
224 | |
225 | } else if (map.get(s) instanceof List<?>){ |
226 | s_json+=(s+ ":" +JsonPluginsUtil.beanListToJson((List<?>)map.get(s), _nory_changes, nory)); |
227 | |
228 | } else { |
229 | JSONObject json = JSONObject.fromObject(map); |
230 | s_json += (s+ ":" +json.toString());; |
231 | } |
232 | |
233 | if (it.hasNext()){ |
234 | s_json+= "," ; |
235 | } |
236 | } |
237 | |
238 | s_json+= "}" ; |
239 | return s_json; |
240 | } |
241 | |
242 | /** |
243 | * 从json数组中得到相应java数组 |
244 | * |
245 | * @param jsonString |
246 | * @return |
247 | */ |
248 | public static Object[] jsonToObjectArray(String jsonString) { |
249 | |
250 | JSONArray jsonArray = JSONArray.fromObject(jsonString); |
251 | |
252 | return jsonArray.toArray(); |
253 | |
254 | } |
255 | |
256 | public static String listToJson(List<?> list) { |
257 | |
258 | JSONArray jsonArray = JSONArray.fromObject(list); |
259 | |
260 | return jsonArray.toString(); |
261 | |
262 | } |
263 | |
264 | /** |
265 | * 从json对象集合表达式中得到一个java对象列表 |
266 | * |
267 | * @param jsonString |
268 | * @param beanClass |
269 | * @return |
270 | */ |
271 | @SuppressWarnings ( "unchecked" ) |
272 | public static <T> List<T> jsonToBeanList(String jsonString, Class<T> beanClass) { |
273 | |
274 | JSONArray jsonArray = JSONArray.fromObject(jsonString); |
275 | JSONObject jsonObject; |
276 | T bean; |
277 | int size = jsonArray.size(); |
278 | List<T> list = new ArrayList<T>(size); |
279 | |
280 | for ( int i = 0 ; i < size; i++) { |
281 | |
282 | jsonObject = jsonArray.getJSONObject(i); |
283 | bean = (T) JSONObject.toBean(jsonObject, beanClass); |
284 | list.add(bean); |
285 | |
286 | } |
287 | |
288 | return list; |
289 | |
290 | } |
291 | |
292 | /** |
293 | * 从json数组中解析出java字符串数组 |
294 | * |
295 | * @param jsonString |
296 | * @return |
297 | */ |
298 | public static String[] jsonToStringArray(String jsonString) { |
299 | |
300 | JSONArray jsonArray = JSONArray.fromObject(jsonString); |
301 | String[] stringArray = new String[jsonArray.size()]; |
302 | int size = jsonArray.size(); |
303 | |
304 | for ( int i = 0 ; i < size; i++) { |
305 | |
306 | stringArray[i] = jsonArray.getString(i); |
307 | |
308 | } |
309 | |
310 | return stringArray; |
311 | } |
312 | |
313 | /** |
314 | * 从json数组中解析出javaLong型对象数组 |
315 | * |
316 | * @param jsonString |
317 | * @return |
318 | */ |
319 | public static Long[] jsonToLongArray(String jsonString) { |
320 | |
321 | JSONArray jsonArray = JSONArray.fromObject(jsonString); |
322 | int size = jsonArray.size(); |
323 | Long[] longArray = new Long[size]; |
324 | |
325 | for ( int i = 0 ; i < size; i++) { |
326 | |
327 | longArray[i] = jsonArray.getLong(i); |
328 | |
329 | } |
330 | |
331 | return longArray; |
332 | |
333 | } |
334 | |
335 | /** |
336 | * 从json数组中解析出java Integer型对象数组 |
337 | * |
338 | * @param jsonString |
339 | * @return |
340 | */ |
341 | public static Integer[] jsonToIntegerArray(String jsonString) { |
342 | |
343 | JSONArray jsonArray = JSONArray.fromObject(jsonString); |
344 | int size = jsonArray.size(); |
345 | Integer[] integerArray = new Integer[size]; |
346 | |
347 | for ( int i = 0 ; i < size; i++) { |
348 | |
349 | integerArray[i] = jsonArray.getInt(i); |
350 | |
351 | } |
352 | |
353 | return integerArray; |
354 | |
355 | } |
356 | |
357 | /** |
358 | * 从json数组中解析出java Double型对象数组 |
359 | * |
360 | * @param jsonString |
361 | * @return |
362 | */ |
363 | public static Double[] jsonToDoubleArray(String jsonString) { |
364 | |
365 | JSONArray jsonArray = JSONArray.fromObject(jsonString); |
366 | int size = jsonArray.size(); |
367 | Double[] doubleArray = new Double[size]; |
368 | |
369 | for ( int i = 0 ; i < size; i++) { |
370 | |
371 | doubleArray[i] = jsonArray.getDouble(i); |
372 | |
373 | } |
374 | |
375 | return doubleArray; |
376 | |
377 | } |
378 | |
379 | } |