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

2023-11-12

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;
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • RabbitMQ提供了6种消息模型介绍

    RabbitMQ提供了6种消息模型 但是第6种其实是RPC 并不是MQ 因此不予学习 那么也就剩下5种 但是其实3 4 5这三种都属于订阅模型 只不过进行路由的方式不同 一 基本消息模型 RabbitMQ是一个消息代理 它接受和转发消息 你
  • oracle删除重复数据保留第一条记录

    1 查找表中多余的重复记录 重复记录是根据单个字段 Id 来判断 select from 表 where Id in select Id from 表 group byId having count Id gt 1 2 删除表中多余的重复记
  • zoj 1201 Inversion

    题目意思 如果输入的是p类串 则输出i类串 如果输出的是i类 则输出p类串 p转i 寻找在p串中在j左边的比j大的数的个数 i串中的第j个数填为该数 i转p 从尾部开始 若第j个数的值为x 则说明在p串中j的左边有x个数大于j 通过从后到前
  • spring集成kafka,实现一个topic可以被多个group消费

    由于新公司是做物联网的 公司刚起步 没什么项目 就是在做一些基础的服务的搭建 现在微服务这么火 可想而知 Spring Boot Spring Cloud 是必须要会的技能 而做物联网 把各种智能设备的数据采集上来 也避免不了要用到消息系统
  • Linux 下qt creator 对c++ 和cuda混合编译生成.so 文件

    问题一 creator 上如何设置可以编译输出 so 文件 要做哪些工作呢 解决如下 1 TEMPLATE lib DEFINES TESTPCL LIBRARY 我的项目名 TARGET testPCL 2 在我要开放出去的接口类那里 做
  • JavaFX之Drag And Drop拖放操作

    声明 本博客文章原创类别的均为个人原创 版权所有 转载请注明出处 http blog csdn net ml3947 看到有网站直接copy不加链接 当然我的个人博客文章目前都是从我的CSDN博客转移上去的 大家好 新的JavaFX的教程又
  • 两个MySQL做双数据源如何配置_SpringBoot系列--Mysql、Sqlserver 双数据源配置

    在最近的项目开发中 需要用到Mysql和Sqlserverl两种数据库 也就是要进行双数据源的配置 网上看了下 大多比较繁琐 且不够明确 今天分享一个在SpringBoot 中简洁高效配置双数据源的方案 项目结构如下 application
  • Android之ProgressDialog与自定义LoadingDialog

    最近呢一直进行Android项目的开发 开发过程中发现 以前的好多知识点都想不起来了 都得先去Google一下 进展缓慢 耗时又耗力 所以决定将开发中的知识点慢慢总结下来 以便日后查验 大家在进行网络请求数据的时候 尤其是第一次 是不是也会
  • ESP32CAM连接阿里云物联网平台

    搭建arduino开发环境 这里不多说 网上有很多教程 简单说下我在搭建环境时踩的一些坑 1 在arduino库管理器中下载esp32的库出错 解决方法 搭个梯子下载就行了 2 上传项目报错 这个问题出现的原因是板子连线有问题 在烧录的时候
  • 数据结构时间复杂度T(n)=O(f(n))的含义

    1 首先要明白数量级的表示符号 O 和o 分别代表 同阶和高阶 例 如果a b都是无穷小 高阶 如果lim n gt 0 b a的极限等于0 就说b是比a高阶的无穷小 记作b o a 同阶 如果lim n gt 0 b a的极限等于c c
  • HashMap/ConcurrentHashMap在单线程模式下的性能比较

    起源 阅读源码发现jdk8中ConcurrentHashMap是基于synchronized来加锁实现多线程安全的 但是实现方式上与早期的HashTable又有了很大的区别 虽然都是使用synchronized来加锁 但是锁的粒度不一样 大
  • Python+Pycharm和 VisualStudio C++社区版使用PK及易混淆的语法问题

    这2年都是在用Python 使用环境要么是Python的IDLE UE 要么使用Pycharm 近年来基本上都是使用的Pycharm 期间偶尔阅读一下C 的代码 但一直没安装相关编译器 近来为了研究OpenCV的算法 发现光阅读源代码以及难
  • linux CentOS7 keepalived+LVS(DR)搭建部署

    目录 一 作用 二 环境简介 三 操作步骤 一 作用 使用keepalived解决lvs的单点故障 高可用集群 二 环境简介 1 准备6台虚拟机 2台做LVS主备调度器 2台做web服务器 1台做存储 1台客户机验证 2 LVS主备调度器
  • 如何在pycharm删除多余的空行

    如何在pycharm删除多余的空行 示例 1 使用快捷键Ctrl r 输入 n替换为空 点击Replace all 2 完成效果如下 3 使用快捷键Ctrl Alt L 让它变的更符合PEP8标准
  • 【致敬未来的攻城狮计划】--RA2E1 开发板测评(1)keil环境配置

    前言 1 首先感谢 李肯前辈的活动 从而申请到了RA2L1开发板的测评 2 本文将会简单介绍此开发的Renesas RA2L1 开发板的前期配置 需要注意的是 MDK版本要5 30 以上 MDK下载链接 3 相关资料 链接 https pa
  • iptables防火墙开放方法和常用命令

    开放端口 iptables I INPUT p tcp dport 80 j ACCEPT 保存配置 service iptables save 重启防火墙 service iptables restart 查看状态 service ipt
  • 编译原理——语法分析器(C/C++代码实现)

    0 实验目的 编写一个简单的LL 1 语法分析器 注意 此实验是简化版的LL 1 文法 已给出预测分析表 不需要求FIRST和FOLLOW集 直接根据预测分析表编写程序即可 1 实验要求 根据编译原理理论课中学习的算术表达式文法 以及该文法
  • useMemo与useCallback使用指南

    在介绍一下这两个hooks的作用之前 我们先来回顾一下react中的性能优化 在hooks诞生之前 如果组件包含内部state 我们都是基于class的形式来创建组件 当时我们也知道 react中 性能的优化点在于 调用setState 就
  • Linux部署docker容器(使用root用户登录)

    1 查看linux环境是否存在 podman rpm q podman 2 存在就删除podman dnf erase podman buildah 3 添加仓库 dnf config manager add repo https down
  • Postman之接口返回的数据解析为DDL、DML SQL及树结构数据

    JavaScript的将JSON数组转换为树形结构 第三方返回的JOSN数据我们想要快速的转换为结构化数据存入数据库 一般都需要写程序进行解析入库 对于前期获取 分析数据来说时间成本有点大 基于Postman Test在请求响应后对响应数据