第三方返回的JOSN数据我们想要快速的转换为结构化数据存入数据库,一般都需要写程序进行解析入库。对于前期获取、分析数据来说时间成本有点大,基于Postman Test在请求响应后对响应数据进行解析,生成DDL、DML SQL语句,快速的将数据入库进行分析。
- 遍历JSONArray数据
- 获取JSONObject对象的所有属性名数据,构造建表DDL语句
- 获取JSONObject对象的所有属性名、属性值数据,构造INSERT DML语句
- 根据入参获取JSONObject对象的父子关系属性值,构建树形结构数据
// 响应结果转为JSON对象
var responeData = JSON.parse(responseBody);
let jsonArray = responeData.Result;
// 建表DDL SQL语句
let createTableSql = 'create table table_name (';
// JSONObject中所有属性名称
let ddlColumnSql;
// JSONObject生成的INSERT DML语句
var allInsertDataSql = [];
// 遍历JSONArray元素
for (var data in jsonArray) {
ddlColumnSql = '';
let channelData = jsonArray[data];
// 获取JSONObject中所有属性名称
let propertyNames = [];
for (var propertName in channelData) {
propertyNames.push(propertName);
}
// 参数名按照字典排序
propertyNames.sort();
// JSONObject生成INSERT语句
let insertDataSql = 'insert into table_name (';
// 所有属性名称
let columns = '';
// 所有属性值
let datas = '';
for (let paramName of propertyNames) {
// 定义字段
ddlColumnSql += paramName + ' varchar(256), ';
columns += paramName + ', ';
datas += '\'' + channelData[paramName] + '\', ';
}
// 将字符串中最后一个元素", "逗号去掉,
var reg = /, $/gi;
columns = columns.replace(reg, "");
datas = datas.replace(reg, "");
ddlColumnSql = ddlColumnSql.replace(reg, "");
insertDataSql = insertDataSql + columns + ') values ( ' + datas + ' );';
allInsertDataSql.push(insertDataSql);
}
console.log(allInsertDataSql.join('\n'));
console.log(' ');
console.log(' ');
createTableSql = createTableSql + ddlColumnSql + ')';
console.log(createTableSql);
console.log(' ');
console.log(' ');
// sonId、parentId父子属性视实际而定
let treeData = convertToTree(jsonArray, 'sonId', 'parentId');
// 转换成字符串输出
console.log(JSON.stringify(treeData));
// 数组转换为树形结构
function convertToTree(jsonArray, sonId, parentId) {
let treeData = [];
if (!Array.isArray(jsonArray)) {
return treeData
}
var map = {};
// 清除children属性信息
jsonArray.forEach(function (item) {
delete item.children;
map[item[sonId]] = item;
});
jsonArray.forEach(function (item) {
var parent = map[item[parentId]];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
treeData.push(item);
}
});
return treeData;
};