【御控物联】JavaScript JSON结构转换(5):对象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. 1.转换映射【高级配置选项】

转换映射包含两种

  • 交叉映射(默认)
    交叉映射主要是针对一对多、多对一、多对多的情况
  • 一对一映射
    一对一映射主要是针对一对一情况,此种情况需要注意,由于对象的属性每次重组后顺序无法控制,所以尽量通过属性名称进行精准映射

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

源JSON结构:

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

目标JSON结构:

{
    "b1": {
        "k2": {
            "k2_child": "v2_child"
        },
        "k3": {
            "k3_child": "v3_child"
        }
    }
}

转换需求:

以下需求分别执行

  1. 一对多:将源结构的“a.c”值追加到目标结构的“b1.*”值
  2. 多对一:将源结构的“a.*”值追加到目标结构的“b1.k2”值
  3. 多对多:将源结构的“a.”值追加到目标结构的“b1.”值
  4. 一对一:将源结构的“a.”键追加到目标结构的“b1.”值

四、代码实现

1.一对多:将源结构的“a.c”值追加到目标结构的“b1.*”值


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

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

2.多对一:将源结构的“a.*”值追加到目标结构的“b1.k2”值

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

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

3.多对多:将源结构的“a.*”值追加到目标结构的“b1.*”值

import JsonTranferUtil from './json_transfer_new'
const jsonOrg = {
  "a": {
    "c": {
      "c_child": "2"
    },
    "d": {
      "d_child": "3"
    }
  }
};
const jsonAim = {
  "b1": {
    "k2": {
      "k2_child": "v2_child"
    },
    "k3": {
      "k3_child": "v3_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": "1",
      "TranOP": "1",
      "TranWay": "1"
    }
  }
];
/******************* 测试程序***************** */
let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 88888888888)

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

4.一对一:将源结构的“ a.* ”键追加到目标结构的“ b1.* ”值

mport JsonTranferUtil from './json_transfer_new'
const jsonOrg = {
  "a": {
    "c": {
      "c_child": "2"
    },
    "d": {
      "d_child": "3"
    }
  }
};
const jsonAim = {
  "b1": {
    "k2": {
      "k2_child": "v2_child"
    },
    "k3": {
      "k3_child": "v3_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": "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
  • 工具连接:数据转换工具

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

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

相关文章

学习鸿蒙基础(9)

目录 一、鸿蒙国际化配置 二、鸿蒙常用组件介绍 三、鸿蒙像素单位介绍 四、鸿蒙布局介绍 1、Row与Column线性布局 2、层叠布局-Stack 3、弹性布局 4、栅格布局 5、网格布局 一、鸿蒙国际化配置 base目录下为默认的string。en_US对应美国的。zh_CN对应中国的。新增一个s…

【c++】类和对象(五)赋值运算符重载

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章带大家认识赋值运算符重载,const成员,取地址及const取地址操作符重载等内容 目录 1.赋值运算符重载1.1运算符重载1.1.1特性&#…

【Python基础教程】3 . 算法的时间复杂度

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:python基础教程 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、…

首个基于SSM-Transformer混合架构,开源商业大模型Jamba

3月29日,知名AI研究实验室AI21在官网开源了,首个基于SSM-Transformer混合架构的商业大模型——Jamba。 目前,ChatGPT、Stable Difusion 、Lyria等产品使用的皆是Transformer架构,虽然在捕捉序列内长距离依赖关系、泛化能力、特征…

基于SpringBoot的农产品直卖平台

采用技术 基于SpringBoot的农产品直卖平台的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 用户功能 农产品信息 确认下单 农产品订单 购物车 商家功…

vue 组件基础

组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件模型,使我们可以在每…

在遭受攻击时如何有效监测服务器流量峰值——实战指南

引言 在网络安全领域,分布式拒绝服务攻击(DDoS)是一种常见的针对服务器及网络资源的恶意行为,它通过短时间内发送大量无效请求,导致服务器不堪重负而无法正常服务合法用户。当服务器遭受攻击时,快速识别并…

【重磅消息】HANA Cloud QRC1/2024发布了

SAP重棒消息,HANA Cloud于3月25日正式发布2024第一个版本QRC1 。有时候,我爱把它跟PostgreSQL的小版本进行类比。因为PG基本上也是一个季度,发布一个版本,但那个是小版本。看起来有些类似。如果以年份开头,HANA Cloud也…

ARP协议定义及工作原理

ARP的定义 地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说,所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议&a…

원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)

클릭 한 번으로 전자상거래 플랫폼 데이터를 캡처하는 것은 일반적으로 웹 페이지에서 정보를 자동으로 추출 할 수있는 네트워크 파충류 기술과 관련됩니다.그러나 모든 형태의 데이터 수집은 해당 웹 사이트의 사용 약관 및 개인 정보 보호 정책 및 현지 법률 및 규정을 준수…

手撕算法-跳跃游戏

描述 分析 如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新如果可以一直跳到最后,就成功了 代码 class Solution {…

图论- 最小生成树

一、最小生成树-prim算法 1.1 最小生成树概念 一幅图可以有很多不同的生成树,比如下面这幅图,红色的边就组成了两棵不同的生成树: 对于加权图,每条边都有权重(用最小生成树算法的现实场景中,图的边权重…

【测试篇】测试眼里的 BUG

文章目录 如何描述一个bug如何定义 bug 的级别BUG 的生命周期跟开发起争执怎么办(高频面试题) 如何描述一个bug 一个合格的bug描述应该包含以下几个部分: 发现问题的版本问题出现的环境错误重现的步骤预期行为的描述错误行为的描述其他&…

Python-基础部署

机器没法直接读懂我们写的代码,需要解释解释器作为中间的翻译,把代码转换成字节码在执行 安装python解释器 Download Python | Python.org 安装代码编辑器 pycharm Thank you for downloading PyCharm! 创建一个项目,每个项目里的文件夹…

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码 手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流…

【Node.JS】koa

文章目录 概述koa和express对比koa下载安装使用1.创建koa项目文件目录2. 创建koa服务3. 添加路由 koa-router4. 数据库服务 mongodb5. 添加请求参数json处理 koa-bodyparser6. 用户接口举例7.引入koa一些常用插件8.用户登录验证 koa-jwt9.webpack生产打包 来源 概述 Koa 是一个…

宝塔面板 -- 打包前端项目并部署提升访问速度

文章目录 前言一、打包前端项目二、添加PHP项目三、部署打包文件四、开通防火墙五、运行网站总结 前言 在前面写到的文章使用宝塔面板部署前端项目中,并没有将前端项目打包而是直接部署,导致网站访问速度非常慢,加载甚至要十几秒。因此&…

Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions(IA-YOLO)

1、总体概述 基于深度学习的目标检测在常规条件的数据集可以获得不错的结果,但是在环境、场景、天气、照度、雾霾等自然条件的综合干扰下,深度学习模型的适应程度变低,检测结果也随之下降,因此研究在复杂气象条件下的目标检测方法…

shell的工作原理

本文旨在讲解shell的工作原理,希望读完本文,能使读者对shell的工作原理有一定的认识,废话不多说,开唠! 在讲解shell的工作原理之前,我要首先给大家讲一下什么是操作系统,以Linux操作系统为例&am…

第N6周:使用Word2vec实现文本分类

import torch import torch.nn as nn import torchvision from torchvision import transforms,datasets import os,PIL,pathlib,warnings #忽略警告信息 warnings.filterwarnings("ignore") # win10系统 device torch.device("cuda"if torch.cuda.is_ava…