当前位置:   article > 正文

Json 2 POJO

json2pojo
  1. public class Json2Object {
  2. private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  3. private static FileWriter getFileWriter(String className) throws IOException {
  4. File targetPath = new File("gen");
  5. if (!targetPath.exists()) {
  6. targetPath.mkdirs();
  7. }
  8. File file = new File(targetPath, StringUtils.capitalize(className) + ".java");
  9. return new FileWriter(file);
  10. }
  11. private static void cleanTargetPath() throws IOException {
  12. FileUtils.deleteDirectory(new File("gen"));
  13. }
  14. private static JSON getInputJson() throws IOException {
  15. System.out.println("请输入要转化为对象的Json字符串!");
  16. String json = br.readLine();
  17. try {
  18. json = StringUtils.strip(json);
  19. if (json.startsWith("[")) {
  20. return JSONArray.parseArray(json);
  21. } else {
  22. return JSONObject.parseObject(json, JSONObject.class);
  23. }
  24. } catch (Exception e) {
  25. System.err.println("输入的不是标准的json,请重新输入Json字符串!");
  26. return getInputJson();
  27. }
  28. }
  29. private static String getPkgOrClassName(String promotion) throws IOException {
  30. System.out.println("请输入" + promotion + "");
  31. String json = br.readLine();
  32. if (StringUtils.isNotEmpty(json)) {
  33. return json;
  34. } else {
  35. System.out.println("输入的" + promotion + "为空,请重新输入!");
  36. return getPkgOrClassName(promotion);
  37. }
  38. }
  39. private static void genJavaBean(JSON json, String pkgName, String className) throws IOException {
  40. List<String> readLines = ResouceUtil.getResouceLines("ClassTempldate.txt");
  41. readLines = LineProcessor.changeLines(readLines, "###pkgName###", pkgName);
  42. readLines = LineProcessor.changeLines(readLines, "###VoName###", StringUtils.capitalize(className));
  43. StringBuilder propertyBuilder = new StringBuilder();
  44. if (JSONObject.class.equals(json.getClass())) {
  45. JSONObject jsonObject = (JSONObject) json;
  46. for (String key : jsonObject.keySet()) {
  47. Object object = jsonObject.get(key);
  48. String matchType = matchType(object, key);
  49. propertyBuilder.append("public ").append(matchType).append(" ").append(key).append(";\r\n\t");
  50. if (JSONObject.class.equals(object.getClass())) {
  51. genJavaBean((JSONObject) object, pkgName, StringUtils.capitalize(key));
  52. } else if (JSONArray.class.equals(object.getClass())) {
  53. JSONArray jsonArray = (JSONArray) object;
  54. Iterator<Object> iterator = jsonArray.iterator();
  55. if (iterator.hasNext()) {// 如果集合的内容不为空的话,判定里面的内容的类型
  56. Object next = iterator.next();
  57. if (JSONObject.class.equals(next.getClass()) || JSONArray.class.equals(next.getClass())) {
  58. String innerClassName = getPkgOrClassName(next.toString());
  59. genJavaBean((JSON) next, pkgName, innerClassName);
  60. }
  61. }
  62. }
  63. }
  64. } else if (JSONArray.class.equals(json.getClass())) {
  65. JSONArray jsonArray = (JSONArray) json;
  66. Iterator<Object> iterator = jsonArray.iterator();
  67. if (iterator.hasNext()) {// 如果集合的内容不为空的话,判定里面的内容的类型
  68. Object next = iterator.next();
  69. System.out.println(next.getClass().getName());
  70. String matchType = matchType(next.getClass(), "");
  71. if (JSONObject.class.equals(next.getClass()) || JSONArray.class.equals(next.getClass())) {
  72. String innerClassName = getPkgOrClassName(next.toString());
  73. if (StringUtils.isEmpty(matchType)) {
  74. propertyBuilder.append("public ").append(StringUtils.capitalize(innerClassName)).append("[] ;\r\n\t");
  75. }
  76. genJavaBean((JSON) next, pkgName, innerClassName);
  77. } else {
  78. propertyBuilder.append("public ").append(matchType).append("[] ;\r\n\t");
  79. }
  80. } else {
  81. propertyBuilder.append("public String[] ").append(" ;\r\n\t");
  82. }
  83. } else {
  84. System.err.println("错误的类型,请修改程序支持");
  85. }
  86. readLines = LineProcessor.changeLines(readLines, "###columns###", propertyBuilder.toString());
  87. FileWriter fileWriter = getFileWriter(className);
  88. IOUtils.writeLines(readLines, null, fileWriter);
  89. fileWriter.close();
  90. }
  91. public static String matchType(Object object, String key) {
  92. Class<?> clazz = object.getClass();
  93. if (String.class.equals(clazz)) {
  94. return "String";
  95. } else if (Integer.class.equals(clazz)) {
  96. return "int";
  97. } else if (Float.class.equals(clazz)) {
  98. return "float";
  99. } else if (Date.class.equals(clazz)) {
  100. return "Date";
  101. } else if (Boolean.class.equals(clazz)) {
  102. return "boolean";
  103. } else if (Long.class.equals(clazz) || BigDecimal.class.equals(clazz)) {
  104. return "long";
  105. } else if (JSONObject.class.equals(clazz)) {
  106. return StringUtils.capitalize(key);
  107. } else if (JSONArray.class.equals(clazz)) {
  108. JSONArray jsonArray = (JSONArray) object;
  109. Iterator<Object> iterator = jsonArray.iterator();
  110. if (iterator.hasNext()) {// 如果集合的内容不为空的话,判定里面的内容的类型
  111. Object next = iterator.next();
  112. return matchType(next, key) + "[]";
  113. } else {// 如果集合为空的话,默认为空即可
  114. return "String[]";
  115. }
  116. }
  117. throw new RuntimeException("未知类型" + clazz);
  118. }
  119. public static void main(String[] args) throws IOException {
  120. JSON json = getInputJson();
  121. // String pkgName = getPkgOrClassName("包名");
  122. String pkgName = "com.test.cn";
  123. // String className = getPkgOrClassName("类名");
  124. String className = "query";
  125. cleanTargetPath();
  126. System.out.println(json.getClass());
  127. genJavaBean(json, pkgName, className);
  128. }

}

public class ResouceUtil {

  1. public static List<String> getResouceLines(String fileName){
  2. try(InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);) {
  3. return IOUtils.readLines(resourceAsStream);
  4. } catch (Exception e) {
  5. e.printStackTrace();
  6. throw new RuntimeException(e);
  7. }
  8. }
  9. }
  1. public class LineProcessor {
  2. public static List<String> changeLines(List<String> readLines,String templdate, String targetValue) {
  3. List<String> resultLines = new ArrayList<String>();
  4. for (String line: readLines) {
  5. line = line.replace(templdate,targetValue);
  6. resultLines.add(line);
  7. }
  8. return resultLines;
  9. }
  10. }

ClassTempldate.txt中的内容为:

package ###pkgName###.domain;


import com.alibaba.fastjson.JSONObject;


public class ###VoName### { 


###columns###

@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}



转载于:https://my.oschina.net/u/590649/blog/465625

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/444294
推荐阅读
相关标签
  

闽ICP备14008679号