总结的一些json格式和对象/String/Map/List等的互转工具类

总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar、jackson-jaxrs-1.7.1.jar、jackson-mapper-asl-1.7.1.jar这三个jar包

  1. package com.zuidaima.util.json;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.io.Reader;
  5. import java.io.Writer;
  6. import java.net.URL;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import org.codehaus.jackson.JsonNode;
  13. import org.codehaus.jackson.map.DeserializationConfig;
  14. import org.codehaus.jackson.map.ObjectMapper;
  15. import org.codehaus.jackson.map.annotate.JsonSerialize;
  16. import org.codehaus.jackson.map.type.TypeFactory;
  17. public class JsonUtil {
  18. private static ObjectMapper mapper = new ObjectMapper();
  19. static{
  20. /**
  21. * 反序列化时忽略多余的属性
  22. */
  23. mapper.getDeserializationConfig().set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  24. /**
  25. * 忽略Null的值,节省空间.
  26. */
  27. mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
  28. /**
  29. * 忽略Default值木有变化的属性,更节省空间,用于接收方有相同的Class
  30. * 如int属性初始值为0,那么这个属性将不会被序列化
  31. */
  32. mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
  33. }
  34. /**
  35. *
  36. * @Title: isJSON
  37. * @author kaka
  38. * @Description: 判断 jsonString是否可以转换成json格式
  39. * @param @param jsonString
  40. * @param @return
  41. * @return boolean
  42. * @throws
  43. */
  44. public static boolean isJSON(String jsonString) {
  45. return mapper.canSerialize(HashMap.class);
  46. }
  47. public static <V> Map<String, V> toMap(String content,Class<? extends V> clazz) throws Exception {
  48. return mapper.readValue(content, TypeFactory.mapType(HashMap.class,String.class, clazz));
  49. }
  50. public static <V> Map<String, V> toMap(InputStream is,Class<? extends V> clazz) throws Exception {
  51. return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz));
  52. }
  53. public static <V> Map<String, V> toMap(Reader is, Class<? extends V> clazz)throws Exception {
  54. return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz));
  55. }
  56. public static <V> Map<String, V> toMap(URL is, Class<? extends V> clazz)throws Exception {
  57. return mapper.readValue(is, TypeFactory.mapType(HashMap.class,String.class, clazz));
  58. }
  59. public static <E> List<E> toList(String content, Class<? extends E> clazz)throws Exception {
  60. return jsonToList(content, clazz);
  61. }
  62. /**
  63. *
  64. * @Title: jsonToList
  65. * @author kaka
  66. * @Description: json转list , List的元素类型,会一并转换完成 如List<User>
  67. * @param @param <E>
  68. * @param @param content
  69. * @param @param clazz
  70. * @param @return 元素类型为E的List
  71. * @param @throws Exception
  72. * @return List<E>
  73. * @throws
  74. */
  75. public static <E> List<E> jsonToList(String content,Class<? extends E> clazz) throws Exception {
  76. return mapper.readValue(content, TypeFactory.collectionType(ArrayList.class, clazz));
  77. }
  78. /**
  79. *
  80. * @Title: jsonToIntArray
  81. * @author kaka
  82. * @Description: json转整形数组
  83. * @param @param content
  84. * @param @return
  85. * @param @throws Exception
  86. * @return Integer[]
  87. * @throws
  88. */
  89. public static Integer[] jsonToIntArray(String content) throws Exception {
  90. return jsonToArray(content, Integer.class);
  91. }
  92. public static Integer[] jsonToIntArray(String content,String key) throws Exception {
  93. return jsonToArray(content, key, Integer.class);
  94. }
  95. /**
  96. *
  97. * @Title: jsonToArray
  98. * @author kaka
  99. * @Description: json转对象数组
  100. * @param @param <E>
  101. * @param @param content
  102. * @param @param clazz 数组中的对象类型
  103. * @param @return E类型的数组,如User[]
  104. * @param @throws Exception
  105. * @return E[]
  106. * @throws
  107. */
  108. public static <E> E[] jsonToArray(String content, Class<? extends E> clazz)throws Exception {
  109. if(content != null){
  110. return mapper.readValue(content, TypeFactory.arrayType(clazz));
  111. }else{
  112. return null;
  113. }
  114. }
  115. /**
  116. *
  117. * @Title: fromJsonToObject
  118. * @author kaka
  119. * @Description: json转java对象,为兼容原util类
  120. * @param @param <T>
  121. * @param @param content
  122. * @param @param clazz 目标类型
  123. * @param @return
  124. * @param @throws Exception
  125. * @return T  返回类型为T的对象
  126. * @throws
  127. */
  128. public static <T> T fromJsonToObject(String content,Class<? extends T> clazz) throws Exception {
  129. return jsonToObject(content, clazz);
  130. }
  131. public static <T> T jsonToObject(String content, Class<? extends T> clazz)throws Exception {
  132. return mapper.readValue(content, clazz);
  133. }
  134. /**
  135. *
  136. * @Title: jsonToObject
  137. * @author kaka
  138. * @Description: 一个jsonStr包含多个java对象,取其中一个转化为java对象的方法
  139. * @param @param <T>
  140. * @param @param content json格式的字符串
  141. * @param @param key 要转换的子json串的key
  142. * @param @param clazz 目标类型
  143. * @param @return 返回类型为T的对象
  144. * @param @throws Exception
  145. * @return T
  146. * @throws
  147. */
  148. public static <T> T jsonToObject(String content, String key,Class<? extends T> clazz) throws Exception {
  149. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  150. JsonNode path = rootNode.path(key);
  151. if(!path.isMissingNode()){
  152. return jsonToObject(path.toString(), clazz);
  153. }else{
  154. return null;
  155. }
  156. }
  157. public static Integer getInt(String content, String key) throws Exception {
  158. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  159. JsonNode path = rootNode.path(key);
  160. if(!path.isMissingNode()){
  161. return jsonToObject(path.toString(), Integer.class);
  162. }else{
  163. return null;
  164. }
  165. }
  166. public static String getString(String content, String key) throws Exception {
  167. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  168. JsonNode path = rootNode.path(key);
  169. if(!path.isMissingNode()){
  170. return jsonToObject(rootNode.path(key).toString(), String.class);
  171. }else{
  172. return null;
  173. }
  174. }
  175. public static Date getDate(String content, String key) throws Exception {
  176. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  177. JsonNode path = rootNode.path(key);
  178. if(!path.isMissingNode()){
  179. return jsonToObject(path.toString(), Date.class);
  180. }else{
  181. return null;
  182. }
  183. }
  184. /**
  185. * 一个jsonStr包含多个java对象,将指定的key的json转化为对象数组的方法
  186. * @param content 原始的json串
  187. * @param key 要转换的部分
  188. * @param clazz 目标类型
  189. * @return 目标类型的对象数组
  190. * @throws Exception
  191. */
  192. public static <E> E[] jsonToArray(String content, String key,Class<? extends E> clazz) throws Exception {
  193. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  194. JsonNode path = rootNode.path(key);
  195. if(!path.isMissingNode()){
  196. return jsonToArray(rootNode.path(key).toString(), clazz);
  197. }else{
  198. return null;
  199. }
  200. }
  201. public static Integer[] jsonToArray(String content, String key) throws Exception {
  202. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  203. JsonNode path = rootNode.path(key);
  204. if(!path.isMissingNode()){
  205. return jsonToArray(path.toString(), Integer.class);
  206. }else{
  207. return null;
  208. }
  209. }
  210. /**
  211. *
  212. * @Title: jsonToList
  213. * @author kaka
  214. * @Description: 一个jsonStr包含多个java对象,将指定的key的json转化为List<E>的方法
  215. * @param @param <E>
  216. * @param @param content 原始的json串
  217. * @param @param key 要转换的那部分json
  218. * @param @param clazz 目标类型
  219. * @param @return 元素为目标类型的List
  220. * @param @throws Exception
  221. * @return List<E>
  222. * @throws
  223. */
  224. public static <E> List<E> jsonToList(String content, String key,Class<? extends E> clazz) throws Exception {
  225. JsonNode rootNode = mapper.readValue(content, JsonNode.class);
  226. JsonNode path = rootNode.path(key);
  227. if(!path.isMissingNode()){
  228. return toList(path.toString(), clazz);
  229. }else{
  230. return null;
  231. }
  232. }
  233. /**
  234. *
  235. * @Title: toJson
  236. * @author kaka
  237. * @Description: 对象转化成json,已知问题 A a B b b中有a,a中有b , 如果a和b同在一个o中将不能正常转化
  238. * @param @param o  要转换的对象
  239. * @param @return json格式的字符串
  240. * @param @throws Exception
  241. * @return String
  242. * @throws
  243. */
  244. public static String toJson(Object o) throws Exception {
  245. return mapper.writeValueAsString(o);
  246. }
  247. /**
  248. *
  249. * @Title: toJson
  250. * @author kaka
  251. * @Description: 转换成json串到out
  252. * @param @param out
  253. * @param @param o
  254. * @param @throws Exception
  255. * @return void
  256. * @throws
  257. */
  258. public static void toJson(OutputStream out, Object o) throws Exception {
  259. mapper.writeValue(out, o);
  260. }
  261. /**
  262. *
  263. * @Title: toJson
  264. * @author kaka
  265. * @Description: 转换成json串到writer
  266. * @param @param out
  267. * @param @param o
  268. * @param @throws Exception
  269. * @return void
  270. * @throws
  271. */
  272. public static void toJson(Writer out, Object o) throws Exception {
  273. mapper.writeValue(out, o);
  274. }
  275. public static String map2Json(Map map) throws Exception{
  276. return toJson(map);
  277. }
  278. /**
  279. *
  280. * @Title: formatJson
  281. * @author kaka
  282. * @Description: json字符串的格式化
  283. * @param @param json
  284. * @param @param fillStringUnit
  285. * @param @return
  286. * @return String
  287. * @throws
  288. */
  289. public static String formatJson(String json, String fillStringUnit) {
  290. if (json == null || json.trim().length() == 0) {
  291. return null;
  292. }
  293. int fixedLenth = 0;
  294. ArrayList<String> tokenList = new ArrayList<String>();
  295. {
  296. String jsonTemp = json;
  297. //预读取
  298. while (jsonTemp.length() > 0) {
  299. String token = getToken(jsonTemp);
  300. jsonTemp = jsonTemp.substring(token.length());
  301. token = token.trim();
  302. tokenList.add(token);
  303. }
  304. }
  305. for (int i = 0; i < tokenList.size(); i++) {
  306. String token = tokenList.get(i);
  307. int length = token.getBytes().length;
  308. if (length > fixedLenth && i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) {
  309. fixedLenth = length;
  310. }
  311. }
  312. StringBuilder buf = new StringBuilder();
  313. int count = 0;
  314. for (int i = 0; i < tokenList.size(); i++) {
  315. String token = tokenList.get(i);
  316. if (token.equals(",")) {
  317. buf.append(token);
  318. doFill(buf, count, fillStringUnit);
  319. continue;
  320. }
  321. if (token.equals(":")) {
  322. buf.append(" ").append(token).append(" ");
  323. continue;
  324. }
  325. if (token.equals("{")) {
  326. String nextToken = tokenList.get(i + 1);
  327. if (nextToken.equals("}")) {
  328. i++;
  329. buf.append("{ }");
  330. } else {
  331. count++;
  332. buf.append(token);
  333. doFill(buf, count, fillStringUnit);
  334. }
  335. continue;
  336. }
  337. if (token.equals("}")) {
  338. count--;
  339. doFill(buf, count, fillStringUnit);
  340. buf.append(token);
  341. continue;
  342. }
  343. if (token.equals("[")) {
  344. String nextToken = tokenList.get(i + 1);
  345. if (nextToken.equals("]")) {
  346. i++;
  347. buf.append("[ ]");
  348. } else {
  349. count++;
  350. buf.append(token);
  351. doFill(buf, count, fillStringUnit);
  352. }
  353. continue;
  354. }
  355. if (token.equals("]")) {
  356. count--;
  357. doFill(buf, count, fillStringUnit);
  358. buf.append(token);
  359. continue;
  360. }
  361. buf.append(token);
  362. //左对齐
  363. if (i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) {
  364. int fillLength = fixedLenth - token.getBytes().length;
  365. if (fillLength > 0) {
  366. for(int j = 0; j < fillLength; j++) {
  367. buf.append(" ");
  368. }
  369. }
  370. }
  371. }
  372. return buf.toString();
  373. }
  374. private static String getToken(String json) {
  375. StringBuilder buf = new StringBuilder();
  376. boolean isInYinHao = false;
  377. while (json.length() > 0) {
  378. String token = json.substring(0, 1);
  379. json = json.substring(1);
  380. if (!isInYinHao &&
  381. (token.equals(":") || token.equals("{") || token.equals("}")
  382. || token.equals("[") || token.equals("]")
  383. || token.equals(","))) {
  384. if (buf.toString().trim().length() == 0) {
  385. buf.append(token);
  386. }
  387. break;
  388. }
  389. if (token.equals("\\")) {
  390. buf.append(token);
  391. buf.append(json.substring(0, 1));
  392. json = json.substring(1);
  393. continue;
  394. }
  395. if (token.equals("\"")) {
  396. buf.append(token);
  397. if (isInYinHao) {
  398. break;
  399. } else {
  400. isInYinHao = true;
  401. continue;
  402. }
  403. }
  404. buf.append(token);
  405. }
  406. return buf.toString();
  407. }
  408. private static void doFill(StringBuilder buf, int count, String fillStringUnit) {
  409. buf.append("\n");
  410. for (int i = 0; i < count; i++) {
  411. buf.append(fillStringUnit);
  412. }
  413. }
  414. }

引用原文:https://blog.csdn.net/springmvc_springdata/article/details/44056043

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

上一篇:hdu 2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)


下一篇:git安装以及应用