Postman之接口返回的数据解析为DDL、DML SQL及树结构数据

JavaScript的将JSON数组转换为树形结构

        第三方返回的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;
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值