需求
有如下很多条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();
}
文本转换笔记