【御控物联】JavaScript JSON结构转换(7):数组To数组——键值互换属性重组

news2024/11/25 6:54:57

文章目录

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


一、JSON结构转换是什么?

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

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

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

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

二、案例之《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. 将源结构的“a”键替换到目标结构的“b1”键
  2. 将源结构的“a”键追加到目标结构的“b1”值
  3. 将源结构的“a”键替换到目标结构的“b1”值
  4. 将源结构的“a”值替换到目标结构的“b1”键
  5. 将源结构的“a”值追加到目标结构的“b1”中
  6. 将源结构的“a”值替换到目标结构的“b1”中

三、代码实现

1.将源结构的“a”键替换到目标结构的“b1”键

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 = [
  {
    "AimJsonPath": "root.b1",
    "OrgJsonPath": "root.a",
    "TranType": 1,
    "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”值

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 = [
  {
    "AimJsonPath": "root.b1",
    "OrgJsonPath": "root.a",
    "TranType": 2,
    "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"
      }
    },
    {
      "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 = [
  {
    "AimJsonPath": "root.b1",
    "OrgJsonPath": "root.a",
    "TranType": 2,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "2",
      "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”键

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 = [
  {
    "AimJsonPath": "root.b1",
    "OrgJsonPath": "root.a",
    "TranType": 3,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "2",
      "TranOP": "1",
      "TranWay": "1"
    }
  }
];
/******************* 测试程序***************** */
let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 88888888888)

执行结果如下:

在这里插入图片描述

5.将源结构的“a”值追加到目标结构的“b1”中

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 = [
  {
    "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)

执行结果如下:

在这里插入图片描述

6.将源结构的“a”值替换到目标结构的“b1”中


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 = [
  {
    "AimJsonPath": "root.b1",
    "OrgJsonPath": "root.a",
    "TranType": 4,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "2",
      "TranOP": "1",
      "TranWay": "1"
    }
  }
];
/******************* 测试程序***************** */
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.coloradmin.cn/o/1561641.html

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

相关文章

前端(三)React踩坑记录

一、引言 作者最近新的平台项目是需要用react的,和vue区别还是比较大的,这里记录下踩坑和使用经验。 二、环境 框架:antd 依赖: "dependencies": {"ant-design/icons": "^4.7.0","ant-desig…

Linux使用Docker部署RStudio Server结合内网穿透实现公网访问本地服务

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问…

卷积层+多个输入通道

卷积层多输入输出通道 在深度学习中,卷积神经网络(CNN)通常用于处理具有多个输入通道的数据。当输入数据具有多个通道(例如彩色图像的RGB通道)时,卷积操作可以同时在每个通道上进行,并将各通道的…

【成功案例】间隔数月双团伙先后利用某ERP0day实施入侵和勒索的解密恢复项目

1.背景 在2024年3月23日,我们的Solar应急响应团队(以下简称Solar团队)应某公司之邀,介入处理了一起财务系统服务器遭受黑客攻击的事件。该事件导致服务器上大量文件被加密。我们的团队迅速获取了一个被加密的文件,并立…

面试题:MySQL 优化篇

定位慢查询 💖 开源工具 调试工具:Arthas(阿尔萨斯)运维工具:Prometheus(普罗米修斯)、Skywalking 💖 MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关 slow_query_log1 # 设置慢…

HWOD:整型数组排序

一、知识点 while(1){}表示永久循环 使用break结束循环 二、题目 1、描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 2、数据范围 1<n<1000 0<val<100000 3、输入 第一行输入数组元素个数 第二行输入待排序的数组&#x…

安装JupyterLab的集成环境

Python集成环境安装 不要半途而废&#xff0c;不要作业太多就抛下你手中的笔&#xff0c;拿起你旁边的手机&#xff0c;你觉得这样很有意义吗&#xff1f;一个小时一道题都没做&#xff0c;盯着手机屏幕它能给你一个未来吗&#xff1f;少分心就能多做一道题&#xff0c;多学样本…

编程新手必看,Python开发环境工具揭秘:高效编程的必备工具(2)

1、Python主流的开发工具介绍&#xff1a; Python的主流开发工具主要包括PyCharm、Visual Studio Code&#xff08;VS Code&#xff09;、IDLE等。具体介绍如下&#xff1a; 1.1、PyCharm&#xff1a; PyCharm是由JetBrains开发的&#xff0c;专为Python设计的IDE&#xff0…

生成 SSH 公钥

Windows 用户建议使用 Windows PowerShell 或者 Git Bash&#xff0c;在 命令提示符 下无 cat 和 ls 命令。 1、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型 -C 注释 输出&#xff0c;如&#xff1a; 中间…

【tensorflow框架神经网络实现鸢尾花分类_Keras】

文章目录 1、前言2、鸢尾花分类3、结果打印 1、前言 【tensorflow框架神经网络实现鸢尾花分类】一文中使用自定义的方式&#xff0c;实现了鸢尾花数据集的分类工作。在这里使用tensorflow中的keras模块快速、极简实现鸢尾花分类任务。 2、鸢尾花分类 import tensorflow as t…

python如何画奥运五环

绘制奥运五环主要涉及到Python中的turtle绘图库运用&#xff1a; 程序源代码为&#xff1a; import turtle turtle.width(10) turtle.color(black) turtle.circle(50) turtle.penup() turtle.goto(120,0) turtle.pendown() turtle.color(red) turtle.circle(50) turtle.penup()…

KT-0850——三箱社交箱

动物行为学是一门跨学科的科学&#xff0c;致力于研究动物的行为模式、决策过程以及它们如何在不同的环境中进行社交互动。在探索动物王国的奥秘时&#xff0c;科学家们发展出了多种实验方法&#xff0c;其中三箱社交实验是一种被广泛采用的技术&#xff0c;用于揭示动物在社交…

力扣热题100_链表_141_环形链表

文章目录 题目链接解题思路解题代码 题目链接 141. 环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

从C到C++:深入理解基础语法差别

C基础语法讲解 前言1.输入输出2.命名空间2.1命名空间的理解&#xff1a;2.2命名空间的使用方式 3.缺省参数3.1概念&#xff1a;3.2分类&#xff1a;半缺省函数注意事项&#xff1a; 3.3使用案例&#xff1a;顺序表的初始化 4.函数重载4.1参数重载类型类型&#xff1a; 5.引用5.…

企业员工在线培训系统功能介绍

随着信息技术的飞速发展&#xff0c;企业员工培训方式正逐步从传统的面授转向灵活高效的在线培训。一个综合性的企业员工在线培训系统能够为员工提供多样化的学习资源、便捷的学习途径和有效的学习监督&#xff0c;以下是该系统的主要功能详细介绍&#xff1a; 1. 课程功能 线…

API接口对接全攻略:从入门到精通

在数字化时代&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为了不同软件系统间信息交互的桥梁。对于开发者而言&#xff0c;掌握API接口的对接技术&#xff0c;无疑是通往更高效、更智能的软件开发之路的钥匙。本文将为大家提供一份从入门到精通的API接口对接全攻…

C++语言·入门

现在我们讲完了数据结构初阶部分的内容&#xff0c;数据结构剩下的内容会在C语言讲解的差不多的时候加入。 1. 什么是C C语言是结构化模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度抽象和建模时&#xff0c…

CorePoolExecutor夺命连环问?看你可以接受几招?

一、前言 今天我在看why技术的时候&#xff0c;看到了这个。发现这个没有全部的八股回答&#xff1f;于是我就结合自己的经验&#xff0c;分享下八股 二、八股问答 2.1了解JDK Executors线程池吗? Executor就是一个线程池框架&#xff0c;在开发中如果需要创建线程可优先考…

期权的常见结构

期权收益图 期权的**收益&#xff08;payoff&#xff09;**是指期权到期日时的价值&#xff0c;**期权的损益&#xff08;profit&#xff09;**不但包含期权的收益&#xff0c;还包括期权交易开始时发生的期权费。 买入看涨期权 看涨期权买入方&#xff0c;当到期时标的资产…

【讲解下NLP学习路线的总结】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…