Json自動生成JavaBean工具
阿新 • • 發佈:2019-01-02
package jsonUtilJar; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Map.Entry; import java.util.Set; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class Json2BeanUtil { /** * 讀取本地json檔案,生成對應的JavaBean * @param sourceFilePath json檔案路徑地址 eg:"jsonFile/json.text" * @param targetPath 生成JavaBean路徑 eg:"jsonFile/" * @throws IOException */ @SuppressWarnings("resource") public static void json2Bean(String sourceFilePath, String targetPath) throws IOException { JSONObject jsonObject = JSON.parseObject(getJsonStr(sourceFilePath)); boolean b = template(jsonObject, targetPath); if(true == b) { System.out.println("json生成JavaBean成功!"); } } /** * IO讀取json原始檔 * @param path json原始檔地址 * @return * @throws IOException */ private static String getJsonStr(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(new File(path))); StringBuilder builder = new StringBuilder(); String line = ""; while((line = br.readLine()) != null) { builder.append(line); } br.close(); return builder.toString(); } /** * IO寫入JavaBean檔案 * @param bean JavaBean字串 * @param path JavaBean檔案路徑 * @return * @throws IOException */ private static boolean writeJavaBean(String bean, String path) throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter(new File(path))); bw.write(bean); bw.close(); return true; } /** * 生成JavaBean * @param jsonObject 源json物件 * @param targetPath Java檔案路徑 * @return * @throws IOException */ private static boolean template(JSONObject jsonObject, String targetPath) throws IOException { boolean b = template(jsonObject, targetPath, null); return b; } /** * 首字母大寫 * @param string * @return */ private static String firstUpcase(String string) { if(null == string) { return ""; } String str1 = string.substring(0, 1); String str2 = string.substring(1); return str1.toUpperCase() + str2; } /** * 生成所有欄位 * @param jsonObject 源json物件 * @param targetPath JavaBean檔案路徑 * @return * @throws IOException */ private static String generateFields(JSONObject jsonObject, String targetPath) throws IOException { if(null == jsonObject || jsonObject.size() == 0) { return ""; } Set<Entry<String, Object>> entrySet = jsonObject.entrySet(); StringBuilder builder = new StringBuilder(); for (Entry<String, Object> entry : entrySet) { String fieldType = "String"; //如果欄位型別是List或者Map,需要遞迴生成子依賴類 Object value = entry.getValue(); if(value instanceof JSONArray) { JSONArray jsonArr = (JSONArray) value; Object object = ""; if(null != jsonArr && jsonArr.size() > 0) { object = jsonArr.get(0); } String beanName = formatBeanName(entry.getKey()); template(JSONObject.parseObject(object.toString()), targetPath, beanName); fieldType = "List<" + beanName + ">"; builder.append(generateField(entry.getKey(), fieldType)); }else if(value instanceof JSONObject) { JSONObject jsonObj = (JSONObject) value; String beanName = formatBeanName(entry.getKey()); template(jsonObj, targetPath, beanName); fieldType = beanName; builder.append(generateField(entry.getKey(), fieldType)); }else { builder.append(generateField(entry.getKey(), fieldType)); } } return builder.toString(); } /** * 生成所有get/set方法 * @param jsonObject 源json物件 * @return * @throws IOException */ private static String generateMethods(JSONObject jsonObject) throws IOException { if(null == jsonObject || jsonObject.size() == 0) { return ""; } Set<Entry<String, Object>> entrySet = jsonObject.entrySet(); StringBuilder builder = new StringBuilder(); for (Entry<String, Object> entry : entrySet) { String fieldType = "String"; //如果欄位型別是List或者Map,需要遞迴生成子依賴類 Object value = entry.getValue(); if(value instanceof JSONArray) { String beanName = formatBeanName(entry.getKey()); fieldType = "List<" + beanName + ">"; builder.append(generateMethod(entry.getKey(), fieldType)); }else if(value instanceof JSONObject) { String beanName = formatBeanName(entry.getKey()); fieldType = beanName; builder.append(generateMethod(entry.getKey(), fieldType)); }else { builder.append(generateMethod(entry.getKey(), fieldType)); } } return builder.toString(); } /** * 生成單個欄位 * @param field 欄位名 * @param fieldType 欄位型別 * @return */ private static String generateField(String field, String fieldType) { if(null == field || "" == field || null == fieldType || "" == fieldType) { return ""; } StringBuilder builder = new StringBuilder(); builder.append("\t") .append("private ") .append(fieldType).append(" ") .append(field) .append(";") .append("\r\n"); return builder.toString(); } /** * 生成單個get/set方法 * @param field 欄位名 * @param fieldType 欄位型別 * @return */ private static String generateMethod(String field, String fieldType) { if(null == field || "" == field || null == fieldType || "" == fieldType) { return ""; } StringBuilder builder = new StringBuilder(); builder.append("\t").append("public ").append(fieldType).append(" get").append(firstUpcase(field)).append("() {") .append("\r\n") .append("\t").append("\t").append("return ").append(field).append(";") .append("\r\n") .append("\t").append("}"); builder.append("\r\n"); builder.append("\t").append("public void set").append(firstUpcase(field)).append("(").append(fieldType).append(" ").append(field).append(") {") .append("\r\n") .append("\t").append("\t").append("this. ").append(field).append(" = ").append(field).append(";") .append("\r\n") .append("\t").append("}"); builder.append("\r\n"); return builder.toString(); } /** * 生成JavaBean * @param jsonObject 源json物件 * @param targetPath JavaBean生成路徑 * @param beanName JavaBean名 * @return * @throws IOException */ private static boolean template(JSONObject jsonObject, String targetPath, String beanName) throws IOException { if(null == beanName || "" == beanName) { beanName = "JsonBean"; } StringBuilder builder = new StringBuilder(); builder.append("public class ").append(beanName).append(" {"); builder.append("\r\n"); if(null != jsonObject && jsonObject.size() > 0) { String fields = generateFields(jsonObject, targetPath); String methods = generateMethods(jsonObject); builder.append(fields).append(methods); } builder.append("}"); String path = targetPath + beanName + ".java"; boolean b = writeJavaBean(builder.toString(),path); return b; } /** * 欄位格式化,去除_並大寫首字母 * @param beanName JavaBean名 * @return */ private static String formatBeanName(String beanName) { if(null == beanName || "".equals(beanName)) { return ""; } String[] split = beanName.split("_"); StringBuilder builder = new StringBuilder(); if(null != split && split.length > 0) { for (String str : split) { builder.append(firstUpcase(str)); } } return builder.toString(); } }