【御控物联】JavaScript JSON结构转换(6):对象To对象——综合应用

文章目录

  • 一、JSON结构转换是什么?
  • 二、术语解释
  • 三、案例之《JSON对象 To JSON对象》
  • 四、代码实现
  • 五、在线转换工具
  • 六、技术资料


一、JSON结构转换是什么?

JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JSON对象或数组的过程。这种转换可以包括改变JSON数据的结构、提取特定字段、合并多个JSON数据,或者对数据进行计算和处理等操作。

在JSON结构转换中,常见的操作包括:

  • 提取字段:从一个JSON对象中提取特定字段,生成新的JSON对象。
  • 过滤数据:根据条件过滤JSON数据,生成符合条件的新JSON对象或数组。
  • 映射转换:将一个JSON对象中的字段映射到另一个字段,生成新的JSON对象。
  • 合并数据:将多个JSON对象或数组合并成一个新的JSON对象或数组。

JSON结构转换通常在数据处理、数据清洗、数据分析等场景中广泛应用。通过结构转换,可以根据需求定制化地处理JSON数据,使其符合特定的业务逻辑或数据格式要求。
为此我们提供了一个简单开源的JS类库,接下来我们对此类库进行详细讲解。

二、术语解释

11.转换操作【高级配置选项】

转换操作包含三种

  • 复制源子元素(原Key)(默认)
    将源的子元素复制到目标元素中,并保留源子元素的Key
  • 复制源子元素(新Key)
    将源的子元素复制到目标元素中,并为目标元素的新生成的子元素重新生成Key
  • 复制目标子元素
    依据源的子元素的个数,复制与源子元素同等数量的目标元素的首子元素到目标元素,并为目标元素的新生成的子元素重新生成Key

三、案例之《JSON对象 To JSON对象》

源JSON结构:

{"a": {"c": {"c_child": "2"},"d": {"d_child": "3"},"e": {"e_child": "4"}}
}

目标JSON结构:

    {"b1": {"k": {"k_child": "v_child"}}
}

转换需求:

  1. 在目标b1中依据源生成同等数量的子元素
  2. b1.的键用a..*键替换
  3. b1..k_child的值用a..*值替换

期望效果:

{"b1": {"c_child": {"k_child": "2"},"d_child": {"k_child": "3"},"e_child": {"k_child": "4"}}
}

四、代码实现

  1. 在目标b1中依据源生成同等数量的子元素
  2. b1.的键用a..*键替换
  3. b1..k_child的值用a..*值替换

import JsonTranferUtil from './json_transfer_new'
const jsonOrg = {"a": {"c": {"c_child": "2"},"d": {"d_child": "3"},"e": {"e_child": "4"}}
};
const jsonAim = {"b1": {"k": {"k_child": "v_child"}}
};
/// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.a.*","AimJsonPath": "root.b1","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "2","TranOP": "3","TranWay": "1"}},{"OrgJsonPath": "root.a.*.*","AimJsonPath": "root.b1.*","TranType": 1,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "2"}},{"OrgJsonPath": "root.a.*.*","AimJsonPath": "root.b1.*.*","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "2"}}
];
/******************* 测试程序***************** */
let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 88888888888)

执行结果如下:
在这里插入图片描述

五、在线转换工具

为了让使用者更加方便的配置出映射关系,为此开发了一套在线转换工具,可在工具中通过拖拽即可配置想要的结构转换关系,并可对转换关系所能实现的效果实时进行预览更改。

工具地址:数据转换工具

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

六、技术资料

  • Github:edq-ebara/data-transformation-javascript: 数据转化(javascript) (github.com)
  • 技术探讨QQ群:775932762
  • 工具连接:数据转换工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java(4)之运算符

1、算术运算符 运算符含义表达式加11-减1-1*乘1*2/除2/1%取余5%2 2、赋值运算符 即 表示将右边的值赋给左边的变量 即 int i ; i 1; 运算符含义 表达式 x xyxy-x x-yx - y*x x*yx*y/x x/yx /y%x x%yx %y 代码示例 public class Main {pub…

DXP学习3-单片机时钟显示系统的层次原理图设计

目录 一,自上而下的子母图设计 1,绘制层次式电路母图 1)工程及原理图创建和保存 2)开始绘制层次式母图main.SchDoc 2,绘制图纸符号 1)properties选项卡 2)designator标号 3)filename文件名 4&…

Kafka、ActiveMQ、RabbitMQ和RocketMQ都有哪些区别?

一、问题解析 Kafka、ActiveMQ、RabbitMQ和RocketMQ都是常见的消息中间件,它们都提供了高性能、高可用、可扩展的消息传递机制,但它们之间也有以下一些区别: 1、消息传递模型:Kafka主要支持发布-订阅模型,ActiveMQ、R…

什么是人工智能物联网(AIoT)?

过去十年,从医疗设备、家庭和楼宇自动化到工业自动化等各个领域,物联网 (IoT) 设备的数量呈爆炸式增长。设备包括可穿戴设备、传感器、电器和医疗监视器——所有这些设备都相互连接,收集和共享大量数据。国际数据公司 (IDC) 预测,…

蓝桥杯c++递归与递推

数字三角形 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>using namespace std; const int N 110; int map[N][N]; int n;int main() {cin >> n;for(int i0;i<n;i){for(int j0;j<i;j){cin >> map[i]…

做好自动化测试必备的5大技能,懂一个就超过了99%的人

或许还有一些人认为软件测试的门槛很低&#xff0c;低到任何人都可以做&#xff0c;随便点点就可以了。这里需要澄清一下&#xff0c;不管哪一类测试岗位&#xff0c;如果做深做精都需要下功夫&#xff0c;只是精通的方向不同。试问一下如果让一个什么都不懂、一点业务基础都没…

Linux之ssh服务

目录 一、ssh简介 ssh组件 二、配置文件 三、相关的命令 ssh scp 四、密钥认证 一、ssh简介 远程登陆linux用的就是ssh服务 ssh服务特点就是数据会机密传输 ssh组件 组件&#xff1a;openssh 服务器&#xff1a;sshd 默认端口&#xff1a;22 二、配置文件 /etc/ssh/ss…

【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(三)

2021年全国职业院校技能大赛 网络系统管理&#xff08;样题3&#xff09;模块B&#xff1a;Windows环境 全国职业院校技能大赛执委会.技术专家组 2021年03月 目录 一、赛题说明 3 &#xff08;一&#xff09;竞赛介绍 3 &#xff08;二&#xff09;密码 3 &#xff08;三…

理解 SQL 数据添加:从基础到实践

引言&#xff1a; 在现代软件开发中&#xff0c;数据库是不可或缺的一部分。而 SQL 作为结构化查询语言的代表&#xff0c;广泛应用于数据库管理系统中&#xff0c;为我们提供了强大的数据管理和查询能力。 主题&#xff1a; 我们将从基础的 SQL INSERT INTO 语句开始&…

【智能家居项目】RT-Thread版本——DHT11获取温湿度 | MQTT上传到服务器 | 服务器控制外设

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 这篇文章中&#xff0c;本喵将使用RT-Thread Studio来实现这个智能家居的项目&#xff0c;最终…

【智能算法】帝企鹅优化算法(EPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2018年&#xff0c;G Dhiman等人受到自然界中帝企鹅群体社会行为启发&#xff0c;提出了帝企鹅优化算法&#xff08;Emperor Penguin Optimizer, EPO&#xff09;。 2.算法原理 2.1算法思想 EPO模…

每日OJ题_队列_宽搜bfs④_力扣515. 在每个树行中找最大值

目录 力扣515. 在每个树行中找最大值 解析代码 力扣515. 在每个树行中找最大值 515. 在每个树行中找最大值 难度 中等 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2…

AI 时代来临我们要如何面对?

人工智能&#xff08;AI&#xff09;已经引领了人类社会进入了全新的时代&#xff0c;开启了科技进步的崭新篇章。在过去几十年&#xff0c;人工智能技术迅猛发展&#xff0c;并已经逐步融入到我们的日常生活和职场中。 随着科技的不断进步&#xff0c;人工智能已成为社会发展…

渐变颜色作图

clear clc close all % 生成 x 值 x linspace(0, 5, 1000); % 计算对应的 y 值&#xff08;二次函数分布&#xff09; y x .^ 2; % 添加一些随机噪声 y y randn(size(y)); clinspace(1,10,length(x)); arry1[x,y]; arry2sortrows(arry1,2,descend); arry3[arry2,c]…

求组合背包II(acwing)

题目描述&#xff1a; 给定n组循问&#xff0c;每组询问给定两个整数a&#xff0c;b&#xff0c;请你输出Ca^b mod (1e9 7)的值&#xff0c;。 输入格式&#xff1a; 第一行包含整数n。 接下来2行&#xff0c;每行包含一组a和b。 输出格式&#xff1a; …

类的函数成员(三):拷贝构造函数

一.什么是拷贝构造函数&#xff1f; 1.1 概念 同一个类的对象在内存中有完全相同的结构&#xff0c;如果作为一个整体进行复制或称拷贝是完全可行的。这个拷贝过程只需要拷贝数据成员&#xff0c;而函数成员是共用的&#xff08;只有一份拷贝&#xff09;。 在建立对象…

深入详解MongoDB索引的数据组织结构

MongoDB&#xff0c;作为最受欢迎的NoSQL数据库之一&#xff0c;以其灵活的数据模型和强大的性能而著称。其中&#xff0c;索引是提高MongoDB查询性能不可或缺的一部分。本文将更加深入地探讨MongoDB索引的数据组织结构&#xff0c;揭示其背后的工作原理和优化策略。 目录 一、…

ngrok使用心得记录

1&#xff0c;官网 https://ngrok.com/ 注册(Sign up for free)账号&#xff0c;这里我使用邮箱注册&#xff0c;本来使用github账号登录的&#xff0c;不过需要一个二次短信确认&#xff0c;而且发短信前要先选择国家&#xff0c;国家列表里没有China86&#xff0c;所以只能选…

每天学点儿Python(3) -- for循环

for循环结构格式如下 for 循环变量 in 遍历对象:语句块 举例一、 for i in "Hello"print(i) 执行结果如下 举例二、 #打印100-999之间的水仙花数 #注意&#xff1a;Python中 / 除法&#xff0c;运输后为浮点数, // 为取除法后的整数&#xff0c;而不是C/C中的注释…

Java与Go的并发世界:理解Work Sharing与Work Stealing

概述 最近在理解Golang中的Per P概念&#xff0c;于是我就去Go的源码中挖呀挖&#xff0c;结果挖到了Go的调度器设计。 Golang的调度器设计文档提到了Go中的P(OS线程)调度器使用的是work-stealing调度算法论文。 论文中提到了两个多线程调度算法&#xff1a;work sharing和wor…