【御控物联】JavaScript JSON结构转换(11):数组To数组——综合应用

文章目录

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


一、JSON结构转换是什么?

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

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

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

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

二、术语解释

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

转换操作包含三种

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

三、案例之《JSON数组 To JSON数组》

源JSON结构:

{"a": [[{"c_child": "2"}],[{"d_child": "3"}],[{"e_child": "4"}]]
}

目标JSON结构:

{"b1": [[{"k1_child": "v1_child"}]]
}

转换需求:

以下需求分别执行

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

期望效果:

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

四、代码实现


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

执行结果如下:

在这里插入图片描述

五、在线转换工具

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

工具地址:数据转换工具

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

六、技术资料

  • Github:edq-ebara/data-transformation-javascript: 数据转化(javascript) (github.com)
  • 技术探讨QQ群:775932762
  • 工具连接:数据转换工具
  • 御控官网:https://www.yu-con.com/

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

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

相关文章

golang语言系列:golang基础知识

云原生学习路线导航页(持续更新中) 本文是 golang语言 系列文章,本节会对 golang 基础知识进行学习。gitee有个知识库https://gitee.com/yooome/golang,golang基础知识整理的非常详细了,本文直接链接到该git 0_Go语言的…

蓝桥杯真题:单词分析

import java.util.Scanner; //1:无需package //2: 类名必须Main, 不可修改 public class Main{public static void main(String[]args) {Scanner sannernew Scanner(System.in);String strsanner.nextLine();int []anew int [26];for(int i0;i<str.length();i) {a[str.charA…

记录几个常用命令

目录 一、查询历史命令 二、启动java容器 三、启动java容器并联通mysql容器 一、查询历史命令 # 查出所有"docker run"的历史命令 history | grep "docker run" 二、启动java容器 docker run -itd --name atcc-door -v /home/wwwroot/atcc-door:/hom…

基于蚁群算法的三维路径规划(matlab实现)

作品简介 1 理论基础 1.1 三维路径规划问题概述 三维路径规划指在已知三维地图中&#xff0c;规划出一条从出发点到目标点满足某项指标最优&#xff0c;并且避开了所有三维障碍物的三维最优路径。现有的路径规划算法中&#xff0c;大部分算法是在二维规划平面或准二维规划平面…

分享一种快速移植OpenHarmony Linux内核的方法

移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者&#xff0c;介绍一种借助三方芯片平台自带 Linux 内核的现有能力&#xff0c;快速移植 OpenHarmony 到三方芯片平台的方法。 移植到三方芯片平台的整体思路 内核态层和用户态层 为了更好的解释整个内核…

HP Z440不重启进入bios,在服务器系统里修改bios的配置

HP Z440不重启进入bios&#xff0c;在服务器系统里修改bios的配置 在某些情况下&#xff0c;你可以在不重启并进入BIOS/UEFI设置界面的情况下&#xff0c;直接从操作系统内部修改BIOS配置。这通常通过特定的软件工具实现&#xff0c;这些工具能够与系统的固件层进行交云&#…

校园跑腿的含义是什么?大学里校园跑腿的特点有哪些?

校园跑腿是指校园内的一种学生间互助服务活动&#xff0c;即学生通过平台发布需求&#xff0c;由其他学生以跑腿的方式提供相应服务&#xff0c;以获取服务费。这种服务模式为需求者提供便利&#xff0c;同时也为提供服务的学生带来一定的收入。 大学里校园跑腿的特点主要有以…

git实战教程

Git实战教程涵盖了Git的基本操作以及如何在日常开发中高效地使用Git进行版本控制。以下是一些Git实战的基础操作步骤&#xff0c;以帮助您快速入门和熟悉Git的使用&#xff1a; ### Git基础操作流程 1. **安装Git** - 下载并安装适用于您操作系统的Git客户端&#xff0c;比…

若依分离版 —引入echart连接Springboot后端

1. vue引入echart &#xff08;1&#xff09;首先安装ECharts库。可以通过npm npm install echarts --save &#xff08;2&#xff09;在vue页面中添加一个容器元素来显示图表 <el-card class"mt20"><div id"ha" ref"main"><…

六、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(2)

Rule #5 - If your work changes, your system should too. 准则五&#xff1a;如果你的工作变了&#xff0c;你的系统也应该改变。 For some, work will be consistent enough to not need major changes.You simply stick to the same system and you’ll get the results y…

fbx smpl转换

目录 3.7 3.8版本&#xff1a; c sdk 3.9 自己编译 下面的库和代码结合 测试ok 大神编译了各个版本 smpl转fbx windows 可行代码 3.7 3.8版本&#xff1a; https://github.com/Shiiho11/FBX-Python-SDK-for-Python3.x c sdk vs2019 https://www.autodesk.com/develop…

openGauss 分区

分区 可获得性 本特性自openGauss 1.1.0版本开始引入。 特性简介 数据分区是在一个节点内部对数据按照用户指定的策略做进一步的水平分表&#xff0c;将表按照指定范围划分为多个数据互不重叠的部分。 客户价值 对于大多数用户使用场景&#xff0c;分区表和普通表相比具有…

【Spring】SpringBoot整合MybatisPlus的基本应用

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、MybatisPlus简介 先来看一下官方的简介吧。 MyBatis-Plus &#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为 简化开发、提高效率而生。Myb…

安卓Android 架构模式及UI布局设计

文章目录 一、Android UI 简介1.1 在手机UI设计中&#xff0c;坚持的原则是什么1.2 安卓中的架构模式1.2.1 MVC (Model-View-Controller)设计模式优缺点 1.2.2 MVP(Model-View-Presenter)设计模式MVP与MVC关系&#xff1a; 1.2.3 MVVM(Model—View—ViewModel ) 设计模式1.2.4 …

关于 C/C++ 1Z(17)开源项目 openppp2 协同程式切换工作流

下述为开源项目 openppp2&#xff08;github&#xff09;构建工作在 C/C 17 的 stackful 有栈协同程式的工作流切换示意图&#xff1a; 在 openppp2 之中采用人工手动方式管理协同程式之间的切换&#xff0c;每个中断过程只是保存线程栈信息&#xff08;如寄存器、当前#PC EIP&…

Python PyQt5——QPainter 绘图用法与代码示例

QPainter是Qt框架中的一个类&#xff0c;用于在Qt基于应用程序中进行绘图和绘制图形。 使用QPainter&#xff0c;可以绘制各种形状&#xff0c;如线条、矩形、椭圆和多边形&#xff0c;以及文本和图像。它提供了用于指定颜色、画笔、笔刷和变换的方法。 QPainter 在 PyQt5 中…

Deferred library xxx was not loaded

Deferred 延迟修饰词作用下的文件库尚未完成载入

总结jvm中GC机制(垃圾回收)

前言 本篇博客博主将介绍jvm中的GC机制&#xff0c;坐好板凳发车啦~~ 一.GC相关 1.1回收栈内存 对于虚拟机栈&#xff0c;本地方法栈这部分区域而言&#xff0c;其生命周期与相关线程相关&#xff0c;随线程而生&#xff0c;随线程而灭。并且这三个区域的内存分配与回收具有…

maya安装笔记

目录 linux系统安装 linux系统安装 2020 Ubuntu安装maya2020全过程以及遇到的问题_ubuntu maya安装包-CSDN博客 下载地址&#xff1a; https://up.autodesk.com/2020/MAYA/18BBDBD5-9A15-4095-8D5E-089938EB8E24/Autodesk_Maya_2020_1_ML_Linux_64bit.tgz 参考&#xff1a…

成熟在用的二级医院手术麻醉系统源码 医疗管理系统源码 自主版权

成熟在用的二级医院手术麻醉系统源码 医疗管理系统源码 自主版权 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流程…