代码
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
public class Json转对象完全体_非lombok {
// json
public static JSONObject js;
// 字段说明
public static JSONObject jc;
// 子集(处理时可能会新增,所以用队列)
public static Queue<Dto> zj = new ConcurrentLinkedQueue<>();
public static void main(String[] args) {
handle();
}
public static void handle() {
js = JSONObject.parseObject(s);
if (jc == null) {
jc = JSONObject.parseObject(c);
}
String root = generateCode(javaFileName, js);
System.out.println(root);
suojin = " ";
while (!zj.isEmpty()) {
Dto poll = zj.poll();
String z = generateCode(poll.getKey(), poll.getJsonObject());
System.out.println("\n\n" +
" public static class " + toUpperCaseFirstOne(poll.getKey()) + "{" +
" " + z +
"\n\n }");
}
}
private static String suojin = " ";
public static String generateCode(String className, JSONObject js) {
className = toUpperCaseFirstOne(className);
StringBuffer rs = new StringBuffer();
Set<String> keys = js.keySet();
// 遍历键并获取其类型
StringBuffer fs = new StringBuffer();
Map<String, String> keyJavaType = new HashMap<>();
for (String key : keys) {
Class<?> keyType = String.class;
if (js.get(key) != null) {
keyType = js.get(key).getClass();
}
String javaType = getJavaObject(keyType.toString());
if (keyType.toString().equals("class com.alibaba.fastjson.JSONObject")) {
javaType = toUpperCaseFirstOne(key);
zj.add(new Dto(key, js.getJSONObject(key)));
}
if (keyType.toString().equals("class com.alibaba.fastjson.JSONArray")) {
javaType = "List<" + toUpperCaseFirstOne(key) + ">";
JSONArray jsonArray = js.getJSONArray(key);
if (jsonArray.size() > 0) {
zj.add(new Dto(key, jsonArray.getJSONObject(0)));
} else {
zj.add(new Dto(key, new JSONObject()));
}
}
String remake = jc.getString(key);
if (remake == null) {
remake = "";
}
rs.append("\n\n" +
suojin + "/**\n" +
suojin + " * " + remake + "\n" +
suojin + " */\n" +
suojin + "public " + javaType + " " + key + ";");
fs.append(javaType + " " + key + ",");
keyJavaType.put(key, javaType);
}
fs.delete(fs.length() - 1, fs.length());
// get set
for (String key : keys) {
rs.append(
"\n\n" +
suojin + "public " + keyJavaType.get(key) + " get" + toUpperCaseFirstOne(key) + "() {\n" +
suojin + " return " + key + ";\n" +
suojin + "}\n" +
"\n" +
suojin + "public void set" + toUpperCaseFirstOne(key) + "(" + keyJavaType.get(key) + " " + key + ") {\n" +
suojin + " this." + key + " = " + key + ";\n" +
suojin + "}\n");
}
// 构造函数
rs.append("\n" + suojin + "public " + className + "(" + fs + ") {\n");
for (String key : keys) {
rs.append(
suojin + " this." + key + " = " + key + ";\n");
}
rs.append(suojin + "}");
rs.append("\n\n" + suojin + "public " + className + "() {\n\n");
rs.append(suojin + "}");
return rs.toString();
}
public static class Dto {
private String key;
private JSONObject jsonObject;
public Dto(String key, JSONObject jsonObject) {
this.key = key;
this.jsonObject = jsonObject;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public JSONObject getJsonObject() {
return jsonObject;
}
public void setJsonObject(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
}
public static String getJavaObject(String kt) {
switch (kt) {
case "java.lang.String":
return "String";
case "java.lang.Integer":
case "java.lang.Long":
return "Long";
case "java.lang.Double":
case "java.lang.Float":
case "class java.math.BigDecimal":
return "Double";
default:
break;
}
return "String";
}
private static String javaFileName = "Test";
public static String c = "{\n" +
"\t\"lng\":\"经度\",\n" +
"\t\"qitaData1\":\"其他数据1\",\n" +
"\t\"qitaData2\":\"其他数据2\",\n" +
"\t\"name\":\"名称\",\n" +
"\t\"age\":\"年龄\",\n" +
"\t\"speed\":\"速度\",\n" +
"\t\"a\":\"a\",\n" +
"\t\"b\":\"b\",\n" +
"\t\"c\":\"c\",\n" +
"\t\"d\":\"d\",\n" +
"\t\"lat\":\"纬度\"\n" +
"}";
public static String s = "{\n" +
" \"age\": \"6\",\n" +
" \"name\": \"张三\",\n" +
" \"speed\": 553.8017520000001,\n" +
" \"lng\": 103.980244,\n" +
" \"lat\": 30.694589,\n" +
" \"qitaData1\": {\n" +
" \"a\":1,\n" +
" \"b\":\"2\",\n" +
" \"qitaData2\": {\n" +
" \"c\":\"3\",\n" +
" \"d\":4.0\n" +
" }\n" +
" }\n" + "}";
public static String toUpperCaseFirstOne(String str) {
if (Character.isUpperCase(str.charAt(0)))
return str;
else
return (new StringBuilder()).append(Character.toUpperCase(str.charAt(0))).append(str.substring(1)).toString();
}
}
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.14</version>
</dependency>