【御控物联】 JavaScript JSON结构转换(21):数组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结构:

{
    "b1": [
      [
        {
          "k1_child": "v1_child"
        }
      ],
      [
        {
          "k2_child": "v2_child"
        }
      ],
      [
        {
          "k3_child": "v3_child"
        }
      ]
    ]
  }

目标JSON结构:

{
      "a": {
          "c_child": "v",
      }
  }

转换需求:

以下需求分别执行

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

期望效果:

{
    "a": {
        "k1_child": "v1_child",
        "k2_child": "v2_child",
        "k3_child": "v3_child"
    }
}

四、代码实现


import JsonTranferUtil from './json_transfer'

/************************数组转对象   示例数据 ********************** */


/// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [
  {
    "OrgJsonPath": "root.b1",
    "AimJsonPath": "root.a",
    "TranType": 4,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "2",
      "TranOP": "3",
      "TranWay": "1"
    }
  },
  {
    "OrgJsonPath": "root.b1[*][*].*",
    "AimJsonPath": "root.a.*",
    "TranType": 1,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "21",
      "TranOP": "1",
      "TranWay": "2"
    }
  },
  {
    "OrgJsonPath": "root.b1[*][*].*",
    "AimJsonPath": "root.a.*",
    "TranType": 4,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "21",
      "TranOP": "1",
      "TranWay": "2"
    }
  }
];
const jsonOrg = {
    "b1": [
      [
        {
          "k1_child": "v1_child"
        }
      ],
      [
        {
          "k2_child": "v2_child"
        }
      ],
      [
        {
          "k3_child": "v3_child"
        }
      ]
    ]
  };
const jsonAim ={
        "a": {
            "c_child": "v",
        }
    };

/*******************数组转对象    测试程序***************** */

let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

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

五、在线转换工具

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

工具地址:数据转换工具
在这里插入图片描述

六、技术资料

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

医院智慧手术麻醉系统管理源码 C# .net有演示

医院智慧手术麻醉系统管理源码 C# .net有演示 手术麻醉管理系统(DORIS)是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期,对病人进行全程跟踪与信息管理,自动集成病人HIS、LIS、RIS、PACS信息,采集监护等设备数据&#x…

【THM】Protocols and Servers 2(协议和服务器 2

介绍 协议和服务器房间涵盖了许多协议: 远程登录HTTP协议文件传输协议邮件传输协议POP3IMAP实现这些协议的服务器会受到不同类型的攻击。仅举几例,请考虑: 嗅探攻击(网络数据包捕获)中间人 ( MITM ) 攻击密码攻击(身份验证攻击)漏洞从安全的角度来看,我们始终需要思考…

基于SSM的宠物管理系统

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/89076676?spm=1001.2014.3001.5503 技术:SSM(Spring+SpringMVC+MyBatis)+LayUI+Echarts技术栈,分页采用pagehelper插件,EasyExcel进行Excel文件的导入导出。 宠物管理系统 1 CHINER-宠物管理系…

算法刷题Day27 | 39. 组合总和、40.组合总和II、131.分割回文串

目录 0 引言1 组合总和1.1 我的解题 2 组合总和II2.1 解题 3 分割回文串3.1 切割3.2 总结:分割和组合的区别 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:算法刷题Day27 | 39. 组合总和、40.…

OpenHarmony实战开发-多设备自适应能力

介绍 本示例是《一次开发,多端部署》的配套示例代码,展示了页面开发的一多能力,包括自适应布局、响应式布局、典型布局场景以及资源文件使用。 说明: 自适应布局能力仅可以保证在外部容器大小在一定范围内变化时,容…

考研数学|张宇《1000题》做不下来,怎么办?

张宇的1000题对于初学者 来说确实有一些难度,我的建议是刷完知能行之后再做1000题。 首先,让我们来看看传统习题册存在的一些问题。虽然传统习题册通常会覆盖考试的各个知识点和题型,但其中一些问题在于它们可能过于注重题目的数量&#xff…

性能分析-nginx

tomcat 像kyj项目请求直接对接 tomcat,tomcat的连接池就会直接影响“并发用户数” 如果这种情况下做性能测试的时候,并发用户数不能满足要求,可以适当加大线程池的配置。 如:项目性能测试发现项目所在机器,资源利用率…

产品推荐 | 瑞苏盈科基于立体帧捕捉和视频处理应用的火星Mars EB1开发板

01 产品概述 火星Mars EB1底板是为火星Mars系列FPGA和SoC核心板设计的通用底板,非常适用于立体帧捕捉和视频处理应用,可以为构建基于FPGA的定制化硬件系统提供一个良好的基础和开端。 02 核心亮点 ■ 与所有火星Mars系列FPGA和SoC核心板兼容 ■ 适用…

Stable Diffusion文生图技术详解:从零基础到掌握CLIP模型、Unet训练和采样器迭代

文章目录 概要Stable Diffusion 底层结构与原理文本编码器(Text Encoder)图片生成器(Image Generator) 那扩散过程发生了什么?stable diffusion 总体架构主要模块分析Unet 网络采样器迭代CLIP 模型 小结 概要 Stable …

windows一键休眠,一键唤醒

1.使windows睡眠不可用,cmd以管理员身份运行: powercfg.exe /hibernate off 2.桌面创建快捷键 Rundll32.exe Powrprof.dll,SetSuspendState Sleep

王权与自由国际服测试资格申请 王权与自由steam国际服预约教程

《王权与自由》是一款由《剑灵》开发商NCsoft公开的旗下大型多人MMORPG新作游戏作品。攻城战,这是游戏中的一个重要玩法,主要分为攻城方和防守方。攻城方需要占领外城的遗址,并利用高轮(包括碎石机、跳跃者和战斗航母)…

蓝桥杯第六届c++大学B组详解

前言: 看了很多博客以及视频讲解,感觉都不是很清楚,比较模棱两可,所以干脆自己一边想,一边写博客,也可帮助到其他人,都是根据自己的逻辑来尽量清楚简单的讲清楚题目,喜欢的不要吝啬三…

【JVM】GC导致的性能问题排查与解决方案,日志、堆分析工具介绍

一、必要性 重要应用程序在使用过程中,忽然无法响应用户请求,排查发现网络联通无问题,gateway能够正常接收分发请求,应用进程正常,正常向注册中心发送请求,但是接收http请求全部返回报错。 添加gc后发现内…

前端秘法番外篇----学完Web API,前端才能算真正的入门

目录 一.引言 二.元素的获取和事件 1.获取元素 2.各种事件 2.1点击事件 2.2键盘事件 三.获取&修改操作 1.获取修改元素属性 2.修改表单属性 2.1暂停播放键的转换 2.2计数器的实现 2.3全选的实现 3.样式操作 3.1行内样式操作 3.2类名样式操作 四.节点 1.创…

​最新仿抖音短视频开源版+商城+短视频

​最新仿抖音短视频开源版商城短视频 最新仿抖音短视频开源版商城短视频,完成度已经可以达到官方App的80%了 基于Vue、Vite 实现。使用了最新的 Vue 全家桶技术栈,接口数据通过 axios-mock-adapter模拟 源码截图: 免费下载地址&#xff…

visual studio 2017开发QT框架程序

1. 配置开发环境 首先创建项目 进入到项目后,右键点击项目点击属性,配置如下:

✌2024/4/4—力扣—盛最多水的容器

代码实现: 方法一:暴力解法——遍历左右边,找出所有面积,取最大值——超时 #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b))int maxArea(int *height, int heightSize) {int ans …

CorelDRAW2024全网最详细独家讲解新版本新功能

各位粉丝大家好,为了让大家更深入的了解CorelDRAW2024新版的各项新功能,我们独家邀请到了Corel中国专家名师张苏老师,策划并录制30分钟全中文讲解栏目!干货满满,全程演示,一览CorelDRAW2024新版的各项新功能…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码;HAL_QSPI_MapInit; 这里注意:你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的,如果不是你需要将引脚…

1.8.3 卷积神经网络近年来在结构设计上的主要发展和变迁——GoogleNet/inception-v1

1.8.3 卷积神经网络近年来在结构设计上的主要发展和变迁——GoogleNet/ inception-v1 前情回顾: 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet GoogleNet问题 在VGGNet简单堆…