- public class Json2Object {
- private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
-
- private static FileWriter getFileWriter(String className) throws IOException {
- File targetPath = new File("gen");
- if (!targetPath.exists()) {
- targetPath.mkdirs();
- }
- File file = new File(targetPath, StringUtils.capitalize(className) + ".java");
- return new FileWriter(file);
- }
-
- private static void cleanTargetPath() throws IOException {
- FileUtils.deleteDirectory(new File("gen"));
- }
-
- private static JSON getInputJson() throws IOException {
- System.out.println("请输入要转化为对象的Json字符串!");
- String json = br.readLine();
- try {
- json = StringUtils.strip(json);
- if (json.startsWith("[")) {
- return JSONArray.parseArray(json);
- } else {
- return JSONObject.parseObject(json, JSONObject.class);
- }
- } catch (Exception e) {
- System.err.println("输入的不是标准的json,请重新输入Json字符串!");
- return getInputJson();
- }
- }
-
- private static String getPkgOrClassName(String promotion) throws IOException {
- System.out.println("请输入" + promotion + "");
- String json = br.readLine();
- if (StringUtils.isNotEmpty(json)) {
- return json;
- } else {
- System.out.println("输入的" + promotion + "为空,请重新输入!");
- return getPkgOrClassName(promotion);
- }
- }
-
- private static void genJavaBean(JSON json, String pkgName, String className) throws IOException {
- List<String> readLines = ResouceUtil.getResouceLines("ClassTempldate.txt");
- readLines = LineProcessor.changeLines(readLines, "###pkgName###", pkgName);
- readLines = LineProcessor.changeLines(readLines, "###VoName###", StringUtils.capitalize(className));
-
- StringBuilder propertyBuilder = new StringBuilder();
- if (JSONObject.class.equals(json.getClass())) {
- JSONObject jsonObject = (JSONObject) json;
- for (String key : jsonObject.keySet()) {
- Object object = jsonObject.get(key);
-
- String matchType = matchType(object, key);
- propertyBuilder.append("public ").append(matchType).append(" ").append(key).append(";\r\n\t");
- if (JSONObject.class.equals(object.getClass())) {
- genJavaBean((JSONObject) object, pkgName, StringUtils.capitalize(key));
- } else if (JSONArray.class.equals(object.getClass())) {
- JSONArray jsonArray = (JSONArray) object;
- Iterator<Object> iterator = jsonArray.iterator();
- if (iterator.hasNext()) {// 如果集合的内容不为空的话,判定里面的内容的类型
- Object next = iterator.next();
- if (JSONObject.class.equals(next.getClass()) || JSONArray.class.equals(next.getClass())) {
- String innerClassName = getPkgOrClassName(next.toString());
- genJavaBean((JSON) next, pkgName, innerClassName);
- }
- }
- }
- }
- } else if (JSONArray.class.equals(json.getClass())) {
- JSONArray jsonArray = (JSONArray) json;
- Iterator<Object> iterator = jsonArray.iterator();
- if (iterator.hasNext()) {// 如果集合的内容不为空的话,判定里面的内容的类型
- Object next = iterator.next();
- System.out.println(next.getClass().getName());
- String matchType = matchType(next.getClass(), "");
- if (JSONObject.class.equals(next.getClass()) || JSONArray.class.equals(next.getClass())) {
- String innerClassName = getPkgOrClassName(next.toString());
- if (StringUtils.isEmpty(matchType)) {
- propertyBuilder.append("public ").append(StringUtils.capitalize(innerClassName)).append("[] ;\r\n\t");
- }
- genJavaBean((JSON) next, pkgName, innerClassName);
- } else {
- propertyBuilder.append("public ").append(matchType).append("[] ;\r\n\t");
- }
-
- } else {
- propertyBuilder.append("public String[] ").append(" ;\r\n\t");
- }
- } else {
- System.err.println("错误的类型,请修改程序支持");
- }
- readLines = LineProcessor.changeLines(readLines, "###columns###", propertyBuilder.toString());
- FileWriter fileWriter = getFileWriter(className);
- IOUtils.writeLines(readLines, null, fileWriter);
- fileWriter.close();
- }
-
- public static String matchType(Object object, String key) {
- Class<?> clazz = object.getClass();
- if (String.class.equals(clazz)) {
- return "String";
- } else if (Integer.class.equals(clazz)) {
- return "int";
- } else if (Float.class.equals(clazz)) {
- return "float";
- } else if (Date.class.equals(clazz)) {
- return "Date";
- } else if (Boolean.class.equals(clazz)) {
- return "boolean";
- } else if (Long.class.equals(clazz) || BigDecimal.class.equals(clazz)) {
- return "long";
- } else if (JSONObject.class.equals(clazz)) {
- return StringUtils.capitalize(key);
- } else if (JSONArray.class.equals(clazz)) {
- JSONArray jsonArray = (JSONArray) object;
- Iterator<Object> iterator = jsonArray.iterator();
- if (iterator.hasNext()) {// 如果集合的内容不为空的话,判定里面的内容的类型
- Object next = iterator.next();
- return matchType(next, key) + "[]";
- } else {// 如果集合为空的话,默认为空即可
- return "String[]";
- }
- }
- throw new RuntimeException("未知类型" + clazz);
- }
-
- public static void main(String[] args) throws IOException {
- JSON json = getInputJson();
- // String pkgName = getPkgOrClassName("包名");
- String pkgName = "com.test.cn";
- // String className = getPkgOrClassName("类名");
- String className = "query";
- cleanTargetPath();
- System.out.println(json.getClass());
- genJavaBean(json, pkgName, className);
- }
}
public class ResouceUtil {
- public static List<String> getResouceLines(String fileName){
- try(InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);) {
- return IOUtils.readLines(resourceAsStream);
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
- }
- }
- public class LineProcessor {
-
- public static List<String> changeLines(List<String> readLines,String templdate, String targetValue) {
- List<String> resultLines = new ArrayList<String>();
- for (String line: readLines) {
- line = line.replace(templdate,targetValue);
- resultLines.add(line);
- }
- return resultLines;
- }
-
- }
ClassTempldate.txt中的内容为:
package ###pkgName###.domain;
import com.alibaba.fastjson.JSONObject;
public class ###VoName### {
###columns###
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}