按行读取json文件转成insert的SQL语句

需求

有如下很多条json语句的文本,每条json语句在文本中为一行
{"categoryId":"12","cityId":"123","cityName":"滁州","countryName":"中国","deleteField":"SUCCESS","currency":"CNY","language":"英语","languageCode":"en_US","rangeName":"东亚"}

{"categoryId":"12","cityId":"1","cityName":"明光","countryName":"中国","deleteField":"SUCCESS","currency":"CNY","language":"英语","languageCode":"en_US","rangeName":"东亚"}
取出一条json如下

{
    
    
	"categoryId": "12",
	"cityId": "123",
	"cityName": "滁州",
	"countryName": "中国",
	"deleteField": "SUCCESS",
	"currency": "CNY",
	"language": "英语",
	"languageCode": "en_US",
	"rangeName": "东亚"
}

要把json转换成如下的SQL INSERT语句
INSERT INTO tableName (cityName,rangeName,currency,language,cityId,countryName,languageCode,categoryId) VALUES ( "滁州","东亚","CNY","英语","123","中国","en_US","12");

代码

读取文本每条记录,因为每条记录是json,直接用fastjson转换即可。

public void readFile() {
    
    
    try (
            InputStreamReader isr = new InputStreamReader(new FileInputStream("txt文件的绝对路径"));
            BufferedReader reader = new BufferedReader(isr);
    ) {
    
    
        String line = null;
        String tableName = "tableName";
        while ((line = reader.readLine()) != null) {
    
    
            JSONObject lineJson = JSON.parseObject(line);
            String sql = sqlInsert(lineJson, tableName);
            System.out.println(sql);
        }
    } catch (Exception e) {
    
    
        e.printStackTrace();
    }
}

根据先根据json中每个key,先转成 insert into tableName (若干字段) 形式,再转成 VALUES("内容"); 形式

private String sqlInsert(JSONObject lineJson, String tableName) {
    
    
	//先转成 insert into tableName (若干字段) 形式
    StringBuilder sb = new StringBuilder("INSERT INTO ")
    .append(tableName)
    .append(" (");
    
    for (String key : lineJson.keySet()) {
    
    
        if ("deleteField".equals(key)) {
    
    
            continue;
        }
        sb.append(key).append(",");
    }
    sb.deleteCharAt(sb.length() - 1);

	// 转成 VALUES("内容"); 形式
    sb.append(") VALUES ( ");
    for (String key : lineJson.keySet()) {
    
    
        if ("deleteField".equals(key)) {
    
    
            continue;
        }
        sb.append("\"")
        .append(lineJson.getString(key))
        .append("\"");
        
        sb.append(",");
    }
    sb.deleteCharAt(sb.length() - 1);
    sb.append(")").append(";");

    return sb.toString();
}

文本转换笔记

Guess you like

Origin blog.csdn.net/Hello_Ray/article/details/107259364