最近工作需求中有一个解析层级JSON报文,根据json的key生成建表语句,json的value入库的功能,实现过程有些许坎坷,好在最终简单的实现了,还是觉得写的不够完美,现在将代码分享出来,希望有更优解的大佬可以帮忙优化优化。
项目中使用的是hive仓库,直接上代码吧。
import java.text.SimpleDateFormat;
import java.net.URI;
import java.net.URISyntaxException;
import java.io.FileWriter;
import java.io.IOException;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONTokener;
import java.util.*;
import java.sql.*;
/**
* JSONObject解析生成sql语句以及文件
* @author jiaming.wu
*
*/
@BeanConfig(appId = "jsonToSql",beanId = "JsonToSql",JsonToSql= "DmpIDMEmployee",beanType = BeanType.CONTROLLER,autowired = true,singleton = true,hotMode = true)
@RestConfig(url = "/rest/jsontosql")
public class JsonToSql{
@RestConfig(configName = "JSON生成文件",method = MethodType.POST,url = "/getData")
public String getData() throws Exception{
//此处可以传入JSONString,项目中使用的是接收请求报文
String requestBody = RequestUtil.getRequestBody();
JSONObject job = new JSONObject(requestBody);
String mainTable = "RootTable";
JSONObject resultJsonObj = new JSONObject();
JSONObject result = castJson(job,mainTable,resultJsonObj);
JSONObject finalJsonObj = new JSONObject();
finalJsonObj = getResult(finalJsonObj,result,mainTable);
return finalJsonObj.toString();
}
@RestConfig(configName = "数据初始化",method = MethodType.POST,url = "/upload")
public String upLoadFile() throws Exception{
String requestBody = RequestUtil.getRequestBody();
JSONObject infoJob = new JSONObject(requestBody);
List<String> filedList = new ArrayList<>();
List<Strin