JSONUtils.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. package com.zkh360.api.utils;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8. import com.fasterxml.jackson.databind.DeserializationFeature;
  9. import com.fasterxml.jackson.databind.JavaType;
  10. import com.fasterxml.jackson.databind.ObjectMapper;
  11. import net.sf.json.JSONArray;
  12. import net.sf.json.JSONObject;
  13. import org.apache.commons.beanutils.BeanUtils;
  14. public class JSONUtils {
  15. /**
  16. *
  17. * @author wangwei JSON工具类
  18. * @param
  19. *
  20. */
  21. // 定义jackson对象
  22. private static final ObjectMapper MAPPER = new ObjectMapper();
  23. /***
  24. * 将List对象序列化为JSON文本
  25. */
  26. public static <T> String toJSONString(List<T> list)
  27. {
  28. JSONArray jsonArray = JSONArray.fromObject(list);
  29. return jsonArray.toString();
  30. }
  31. /***
  32. * 将对象序列化为JSON文本
  33. * @param object
  34. * @return
  35. */
  36. public static String toJSONString(Object object)
  37. {
  38. JSONArray jsonArray = JSONArray.fromObject(object);
  39. return jsonArray.toString();
  40. }
  41. /***
  42. * 将JSON对象数组序列化为JSON文本
  43. * @param jsonArray
  44. * @return
  45. */
  46. public static String toJSONString(JSONArray jsonArray)
  47. {
  48. return jsonArray.toString();
  49. }
  50. /***
  51. * 将JSON对象序列化为JSON文本
  52. * @param jsonObject
  53. * @return
  54. */
  55. public static String toJSONString(JSONObject jsonObject)
  56. {
  57. return jsonObject.toString();
  58. }
  59. /***
  60. * 将对象转换为List对象
  61. * @param object
  62. * @return
  63. */
  64. public static List toArrayList(Object object)
  65. {
  66. List arrayList = new ArrayList();
  67. JSONArray jsonArray = JSONArray.fromObject(object);
  68. Iterator it = jsonArray.iterator();
  69. while (it.hasNext())
  70. {
  71. JSONObject jsonObject = (JSONObject) it.next();
  72. Iterator keys = jsonObject.keys();
  73. while (keys.hasNext())
  74. {
  75. Object key = keys.next();
  76. Object value = jsonObject.get(key);
  77. arrayList.add(value);
  78. }
  79. }
  80. return arrayList;
  81. }
  82. /***
  83. * 将对象转换为Collection对象
  84. * @param object
  85. * @return
  86. */
  87. public static Collection toCollection(Object object)
  88. {
  89. JSONArray jsonArray = JSONArray.fromObject(object);
  90. return JSONArray.toCollection(jsonArray);
  91. }
  92. /***
  93. * 将对象转换为JSON对象数组
  94. * @param object
  95. * @return
  96. */
  97. public static JSONArray toJSONArray(Object object)
  98. {
  99. return JSONArray.fromObject(object);
  100. }
  101. /***
  102. * 将对象转换为JSON对象
  103. * @param object
  104. * @return
  105. */
  106. public static JSONObject toJSONObject(Object object)
  107. {
  108. return JSONObject.fromObject(object);
  109. }
  110. /***
  111. * 将对象转换为HashMap
  112. * @param object
  113. * @return
  114. */
  115. public static HashMap toHashMap(Object object)
  116. {
  117. HashMap<String, Object> data = new HashMap<String, Object>();
  118. JSONObject jsonObject = JSONUtils.toJSONObject(object);
  119. Iterator it = jsonObject.keys();
  120. while (it.hasNext())
  121. {
  122. String key = String.valueOf(it.next());
  123. Object value = jsonObject.get(key);
  124. data.put(key, value);
  125. }
  126. return data;
  127. }
  128. /***
  129. * 将对象转换为List>
  130. * @param object
  131. * @return
  132. */
  133. // 返回非实体类型(Map)的List
  134. public static List<Map<String, Object>> toList(Object object)
  135. {
  136. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  137. JSONArray jsonArray = JSONArray.fromObject(object);
  138. for (Object obj : jsonArray)
  139. {
  140. JSONObject jsonObject = (JSONObject) obj;
  141. Map<String, Object> map = new HashMap<String, Object>();
  142. Iterator it = jsonObject.keys();
  143. while (it.hasNext())
  144. {
  145. String key = (String) it.next();
  146. Object value = jsonObject.get(key);
  147. map.put((String) key, value);
  148. }
  149. list.add(map);
  150. }
  151. return list;
  152. }
  153. /***
  154. * 将JSON对象数组转换为传入类型的List
  155. * @param
  156. * @param jsonArray
  157. * @param objectClass
  158. * @return
  159. */
  160. public static <T> List<T> toList(JSONArray jsonArray, Class<T> objectClass)
  161. {
  162. return JSONArray.toList(jsonArray, objectClass);
  163. }
  164. /***
  165. * 将对象转换为传入类型的List
  166. * @param
  167. * @param object
  168. * @param objectClass
  169. * @return
  170. */
  171. public static <T> List<T> toList(Object object, Class<T> objectClass)
  172. {
  173. JSONArray jsonArray = JSONArray.fromObject(object);
  174. return JSONArray.toList(jsonArray, objectClass);
  175. }
  176. /***
  177. * 将JSON对象转换为传入类型的对象
  178. * @param
  179. * @param jsonObject
  180. * @param beanClass
  181. * @return
  182. */
  183. public static <T> T toBean(JSONObject jsonObject, Class<T> beanClass)
  184. {
  185. return (T) JSONObject.toBean(jsonObject, beanClass);
  186. }
  187. /***
  188. * 将将对象转换为传入类型的对象
  189. * @param
  190. * @param object
  191. * @param beanClass
  192. * @return
  193. */
  194. public static <T> T toBean(Object object, Class<T> beanClass)
  195. {
  196. JSONObject jsonObject = JSONObject.fromObject(object);
  197. return (T) JSONObject.toBean(jsonObject, beanClass);
  198. }
  199. /***
  200. * 将JSON文本反序列化为主从关系的实体
  201. * @param jsonString JSON文本
  202. * @param mainClass 主实体类型
  203. * @param detailName 从实体类在主实体类中的属性名称
  204. * @param detailClass 从实体类型
  205. * @return
  206. */
  207. public static <T, D> T toBean(String jsonString, Class<T> mainClass,
  208. String detailName, Class<D> detailClass)
  209. {
  210. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  211. JSONArray jsonArray = (JSONArray) jsonObject.get(detailName);
  212. T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  213. List<D> detailList = JSONUtils.toList(jsonArray, detailClass);
  214. try
  215. {
  216. BeanUtils.setProperty(mainEntity, detailName, detailList);
  217. }
  218. catch (Exception ex)
  219. {
  220. throw new RuntimeException("主从关系JSON反序列化实体失败!");
  221. }
  222. return mainEntity;
  223. }
  224. /***
  225. * 将JSON文本反序列化为主从关系的实体
  226. * @param jsonString JSON文本
  227. * @param mainClass 主实体类型
  228. * @param detailName1 从实体类在主实体类中的属性
  229. * @param detailClass1 从实体类型
  230. * @param detailName2 从实体类在主实体类中的属性
  231. * @param detailClass2 从实体类型
  232. * @return
  233. */
  234. public static <T, D1, D2> T toBean(String jsonString, Class<T> mainClass,
  235. String detailName1, Class<D1> detailClass1, String detailName2,
  236. Class<D2> detailClass2)
  237. {
  238. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  239. JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
  240. JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);
  241. T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  242. List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
  243. List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);
  244. try
  245. {
  246. BeanUtils.setProperty(mainEntity, detailName1, detailList1);
  247. BeanUtils.setProperty(mainEntity, detailName2, detailList2);
  248. }
  249. catch (Exception ex)
  250. {
  251. throw new RuntimeException("主从关系JSON反序列化实体失败!");
  252. }
  253. return mainEntity;
  254. }
  255. /***
  256. * 将JSON文本反序列化为主从关系的实体
  257. * @param jsonString JSON文本
  258. * @param mainClass 主实体类型
  259. * @param detailName1 从实体类在主实体类中的属性
  260. * @param detailClass1 从实体类型
  261. * @param detailName2 从实体类在主实体类中的属性
  262. * @param detailClass2 从实体类型
  263. * @param detailName3 从实体类在主实体类中的属性
  264. * @param detailClass3 从实体类型
  265. * @return
  266. */
  267. public static <T, D1, D2, D3> T toBean(String jsonString,
  268. Class<T> mainClass, String detailName1, Class<D1> detailClass1,
  269. String detailName2, Class<D2> detailClass2, String detailName3,
  270. Class<D3> detailClass3)
  271. {
  272. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  273. JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
  274. JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);
  275. JSONArray jsonArray3 = (JSONArray) jsonObject.get(detailName3);
  276. T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  277. List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
  278. List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);
  279. List<D3> detailList3 = JSONUtils.toList(jsonArray3, detailClass3);
  280. try
  281. {
  282. BeanUtils.setProperty(mainEntity, detailName1, detailList1);
  283. BeanUtils.setProperty(mainEntity, detailName2, detailList2);
  284. BeanUtils.setProperty(mainEntity, detailName3, detailList3);
  285. }
  286. catch (Exception ex)
  287. {
  288. throw new RuntimeException("主从关系JSON反序列化实体失败!");
  289. }
  290. return mainEntity;
  291. }
  292. /***
  293. * 将JSON文本反序列化为主从关系的实体
  294. * @param jsonString JSON文本
  295. * @param mainClass 主实体类型
  296. * @param detailClass 存放了多个从实体在主实体中属性名称和类型
  297. * @return
  298. */
  299. public static <T> T toBean(String jsonString, Class<T> mainClass,
  300. HashMap<String, Class> detailClass)
  301. {
  302. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  303. T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
  304. for (Object key : detailClass.keySet())
  305. {
  306. try
  307. {
  308. Class value = (Class) detailClass.get(key);
  309. BeanUtils.setProperty(mainEntity, key.toString(), value);
  310. }
  311. catch (Exception ex)
  312. {
  313. throw new RuntimeException("主从关系JSON反序列化实体失败!");
  314. }
  315. }
  316. return mainEntity;
  317. }
  318. }