JsonUtil.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package api.common.util;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.JavaType;
  4. import com.fasterxml.jackson.databind.JsonNode;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.fasterxml.jackson.databind.node.TextNode;
  7. import com.fasterxml.jackson.databind.type.TypeFactory;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.regex.Matcher;
  13. import java.util.regex.Pattern;
  14. public class JsonUtil {
  15. private static final ObjectMapper mapper = new ObjectMapper();
  16. /**
  17. * bean 转成 json
  18. *
  19. * @param bean bean 对象
  20. * @param <T> 声明为泛型方法
  21. * @return json 字符串
  22. * @throws JsonProcessingException 异常
  23. */
  24. public static <T> String beanToJson(T bean) throws JsonProcessingException {
  25. return new ObjectMapper().writeValueAsString(bean);
  26. }
  27. /**
  28. * json 转成 bean
  29. *
  30. * @param json json 字符串
  31. * @param tClass 返回值类型
  32. * @param <T> 声明为泛型方法
  33. * @return bean 对象
  34. * @throws JsonProcessingException 异常
  35. */
  36. public static <T> T jsonToBean(String json, Class<T> tClass) throws JsonProcessingException {
  37. return new ObjectMapper().readValue(json, tClass);
  38. }
  39. /**
  40. * bean 转成 json
  41. *
  42. * @param list 列表对象
  43. * @param <T> 声明为泛型方法
  44. * @return json 字符串
  45. * @throws JsonProcessingException 异常
  46. */
  47. public static <T> String listToJson(T list) throws JsonProcessingException {
  48. return new ObjectMapper().writeValueAsString(list);
  49. }
  50. public static <T> List<T> jsonToList(String json, Class<T> tClass) throws JsonProcessingException {
  51. JavaType javaType = TypeFactory.defaultInstance().constructParametricType(List.class, tClass);
  52. if (ObjectUtil.isNull(json)) {
  53. return new ArrayList<>();
  54. }
  55. List<T> list = new ObjectMapper().readValue(json, javaType);
  56. return list;
  57. }
  58. public static Map jsonToMap(String json) {
  59. try {
  60. return new ObjectMapper().readValue(json, HashMap.class);
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. return new HashMap();
  65. }
  66. public static JsonNode readTree(String json) {
  67. try {
  68. return mapper.readTree(json);
  69. } catch (JsonProcessingException e) {
  70. e.printStackTrace();
  71. }
  72. return new TextNode("");
  73. }
  74. //泛化用的,把带下划线的json转换为驼峰jsom
  75. public static String stringToJson(String ss) throws JsonProcessingException {
  76. Map maps = jsonToMap(ss);
  77. Map map = new HashMap();
  78. for (Object obj : maps.keySet()) {
  79. String value = underlineToHump(obj.toString());
  80. map.put(value, maps.get(obj));
  81. }
  82. return beanToJson(map);
  83. }
  84. private static Pattern UNDERLINE_PATTERN = Pattern.compile("_([a-z])");
  85. /**
  86. * 根据传入的带下划线的字符串转化为驼峰格式
  87. *
  88. * @param str
  89. * @return
  90. * @author mrf
  91. */
  92. public static String underlineToHump(String str) {
  93. //正则匹配下划线及后一个字符,删除下划线并将匹配的字符转成大写
  94. Matcher matcher = UNDERLINE_PATTERN.matcher(str);
  95. StringBuffer sb = new StringBuffer(str);
  96. if (matcher.find()) {
  97. sb = new StringBuffer();
  98. //将当前匹配的子串替换成指定字符串,并且将替换后的子串及之前到上次匹配的子串之后的字符串添加到StringBuffer对象中
  99. //正则之前的字符和被替换的字符
  100. matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
  101. //把之后的字符串也添加到StringBuffer对象中
  102. matcher.appendTail(sb);
  103. } else {
  104. //去除除字母之外的前面带的下划线
  105. return sb.toString().replaceAll("_", "");
  106. }
  107. return underlineToHump(sb.toString());
  108. }
  109. }