【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换

文章目录

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


一、JSON结构转换是什么?

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

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

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

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

二、核心构件之转换映射

在对类库进行详细讲解之前,我们先来介绍一下转换映射。
转换映射是JSON结构转换的核心构件,工具依据分析转换映射来进行源与目标JSON结构的转化。

转换映射的构成如下:

{"AimJsonPath": "root.org","OrgJsonPath": "root.aim","TranType": 4,"Options":{"KeyInitIndex":0,"AddElementsOption":"1",        "TranOP":"1",  "TranWay":"1" }
}

转换映射的属性介绍如下:

  1. AimJsonPath
    目标结构路径
  2. OrgJsonPath
    目标结构路径
  3. TranType
    转换类型 1:源Key->目标Key 2:源Key->目标Value 3:源Value->目标Key 4:源Value->目标Value
  4. Options.KeyInitIndex
    自动生成的元素的起始索引(默认为0)
  5. Options.AddElementsOption
    1:追加新元素到数组/对象 (默认为1)
    2:替换数组/对象的原有属性
  6. Options.TranOP
    1:将源子元素复制到目标,使用源子元素的Key(默认为1)
    2:将源子元素复制到目标,为源子元素新生成Key
    3:依据源元素在目标构建同等数量的目标子元素
  7. Options.TranWay
    1:交叉映射 ( 默认为1)
    2:一对一映射

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

源JSON结构:

{"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
}

目标JSON结构:

{"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
}

转换需求:

以下需求分别执行

  1. 将源结构的“devOrg”键替换到目标结构的“devAim”值
  2. 将源结构的“devOrg”键追加到目标结构的“devAim”值
  3. 将源结构的“devOrg”值替换到目标结构的“devAim”值
  4. 将源结构的“devOrg”值追加到目标结构的“devAim”值
  5. 将源结构的“devOrg.642fccd1Org”键追加到目标结构的“devAim[0]”值
  6. 将源结构的“devOrg.642fccd1Org”值追加到目标结构的“devAim[0]”值
  7. 将源结构的“devOrg.642fccd1Org.1Org”键追加到目标结构的“devAim[0]”值
  8. 将源结构的“devOrg.642fccd1Org.1Org”值追加到目标结构的“devAim[0]”值

四、代码实现

1.将源结构的“devOrg”键替换到目标结构的“devAim”值


import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg","AimJsonPath": "root.devAim","TranType": 2,"Options": {"KeyInitIndex": 0,"AddElementsOption": "2","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

2.将源结构的“devOrg”键追加到目标结构的“devAim”值

import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg","AimJsonPath": "root.devAim","TranType": 2,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

3.将源结构的“devOrg”值替换到目标结构的“devAim”值

import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg","AimJsonPath": "root.devAim","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "2","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

4.将源结构的“devOrg”值追加到目标结构的“devAim”值

import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg","AimJsonPath": "root.devAim","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

5.将源结构的“devOrg.642fccd1Org”键追加到目标结构的“devAim[0]”值

import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg.642fccd1Org","AimJsonPath": "root.devAim","TranType": 2,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

6.将源结构的“devOrg.642fccd1Org”值追加到目标结构的“devAim[0]”值

import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg.642fccd1Org","AimJsonPath": "root.devAim","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

7.将源结构的“devOrg.642fccd1Org.1Org”键追加到目标结构的“devAim[0]”值

import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg.642fccd1Org.1Org","AimJsonPath": "root.devAim[0]","TranType": 2,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */let jsonTranferUtil = new JsonTranferUtil(jsonOrg, jsonAim, mappings);
let result = jsonTranferUtil.tranJson();
console.log("*************************最终转换结果*********************************")
console.log(JSON.stringify(result), 9999999999999)

执行结果如下:

在这里插入图片描述

8.将源结构的“devOrg.642fccd1Org.1Org”值追加到目标结构的“devAim[0]”值


import JsonTranferUtil from './json_transfer'/************************数组转对象   示例数据 ********************** *//// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"OrgJsonPath": "root.devOrg.642fccd1Org.1Org","AimJsonPath": "root.devAim[0]","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}}
];
const jsonOrg = {"devOrg": {"642fccd1Org": {"1Org": "111","2Org": "122"},"timeOrg": 1682476529}
};
const jsonAim = {"devAim":[{"idAim": "0001","proAim": [{"idAim": "","nAim": "11","dtAim": "","vAim": "1.1","qAim": ""}]}]
};/*******************数组转对象    测试程序***************** */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
  • 工具连接:数据转换工具

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

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

相关文章

Java类与对象:从概念到实践的全景解析!

​ 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、类的定义格式 在java中定义类时需要用到…

LabVIEW车载轴承振动监测系统

LabVIEW车载轴承振动监测系统 随着汽车工业的快速发展,车用轴承的稳定性和可靠性对保障车辆安全运行越来越重要。目前,大多数车用轴承工作在恶劣的环境下,容易出现各种故障。开发了一种基于LabVIEW的车载轴承振动监测系统,提高车…

941: 有序顺序表的合并操作的实现

学习版 【c语言】 1.顺序表元素类型 2.顺序表的初始化 3.顺序表的插入 4.顺序表的合并 #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm>typedef struct {int* data; // 数据数组的指针int length; // 当前顺序表…

学习平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 1. 系统功能…

【Qt 学习笔记】Day1 | Qt 开发环境的搭建

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Day1 | Qt 开发环境的搭建 文章编号&#xff1a;Qt 学习笔记 / 02 文…

Redis命令-Set命令

基础篇Redis 4.7 Redis命令-Set命令 Redis的Set结构与Java中的HashSet类似&#xff0c;可以看做是一个value为null的HashMap。因为也是一个hash表&#xff0c;因此具备与HashSet类似的特征&#xff1a; 无序元素不可重复查找快支持交集.并集.差集等功能 Set类型的常见命令 …

浅谈AI未来发展趋势与挑战

对于AI大模型未来发展趋势与挑战的个人看法&#xff1a; 1、未来的发展趋势&#xff1a; AI大模型未来发展趋势可以从以下几个关键方面来讨论&#xff1a; 1. 能源与计算效率 绿色计算与节能技术&#xff1a;随着硬件技术的发展&#xff0c;预计未来的AI大模型将进一步降低能…

redis学习-主从复制和哨兵模式

目录 1. 主从复制&#xff0c;读写分离 1.1 介绍 1.2 使用命令介绍 1.3 实现 1.4全量复制和增量复制 2.哨兵模式 1. 主从复制&#xff0c;读写分离 1.1 介绍 指的是将一台redis服务器中的数据复制到其他redis服务器&#xff0c;前者称为主机&#xff0c;后者称为从机&#xf…

基于SpringBoot + Vue实现的高校汉服租赁网站系统设计与实现+毕业论文

介绍 高校汉服租赁网站管理系统可以提高高校汉服租赁网站信息管理问题的解决效率&#xff0c;优化高校汉服租赁网站信息处理流程&#xff0c;保证高校汉服租赁网站信息数据的安全&#xff0c;它是一个非常可靠&#xff0c;非常安全的应用程序。系统包含普通用户和管理员两个角…

【AI系列】Python NLTK 库和停用词处理的应用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

matlab及其在数字信号处理中的应用001:软件下载及安装

目录 一&#xff0c;matlab的概述 matlab是什么 matlab适用于的问题 matlab的易扩展性 二&#xff0c;matlab的安装 1&#xff0c;解压所有压缩文件 2&#xff0c;解压镜像压缩文件 3&#xff0c;运行setup.exe 4&#xff0c;开始安装 5&#xff0c;不要运行软件…

GEE23:基于植被物候实现农作物分类

地物分类 1. 写在前面2. 北京作物分类 1. 写在前面 今天分享一个有意思的文章&#xff0c;用于进行农作物分类。文章提出了一个灵活的物候辅助监督水稻(PSPR)制图框架。主要是通过提取植被物候&#xff0c;并自动对物候数据进行采样&#xff0c;获得足够多的样本点&#xff0c;…

探索一致性哈希算法以及在 Dubbo 负载均衡中的应用

文章目录 负载均衡简介基于哈希算法的负载均衡策略传统哈希算法一致性哈希算法虚拟一致性哈希算法 一致性哈希在 Dubbo 中的应用ConsistentHashSelector 构造方法ConsistentHashSelector select方法 负载均衡简介 负载均衡&#xff08;Load Balance&#xff0c;简称 LB&#x…

WPF中获取TreeView以及ListView获取其本身滚动条进行滚动

实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) TreeView:TreeViewAutomationPeer lvap new TreeViewAutomationPeer(treeView); var svap lvap.GetPattern(PatternInterface.Scroll) as ScrollViewerAutomationPeer; var scroll svap.Owner as ScrollVie…

【HCIP学习】网络类型级数据链路层协议

思维导图在上面哦~ 一、网络类型的分类&#xff08;4种&#xff09; 出现原因&#xff1a;数据链路层使用的协议及规则不同&#xff0c;造成了不同的网络类型 1、多点接入网络&#xff08;MA&#xff09;------一条网段内上出现多个设备 BMA&#xff1a;广播型多点接入&…

linux内核:ftrace——追踪内核行为

文章目录 1. 简介2. 使用2.1 加入ftrace2.2 ftrace 基础2.2.1 tracer2.2.2 filter&#xff08;可选&#xff09;2.2.3 读取trace2.2.4 ftrace_enabled 2.3 使用function_graph查看do_sys_open的执行过程2.3 使用function查看do_sys_open的执行2.3 使用wakeup2.3 使用wakeup_rt2…

C语言例1-11:语句 while(!a); 中的表达式 !a 可以替换为

A. a!1 B. a!0 C. a0 D. a1 答案&#xff1a;C while()成真才执行&#xff0c;所以!a1 &#xff0c;也就是 a0 原代码如下&#xff1a; #include<stdio.h> int main(void) {int a0;while(!a){a;printf("a\n");} return 0; } 结果如…

JUC:Monitor 与 Java对象头的内容与锁关系

文章目录 Monitorjava对象头Monitor&#xff08;锁、管程&#xff09; Monitor java对象头 普通对象 Mark Word 主要用来存储对象自身的运行时数据、klass word就是指向该对象的类型。 数组对象 mark word 不同对象状态下结构和含义不同。 Monitor&#xff08;锁、管…

SRS OBS利用RTMP协议实现音视频推拉流

参考&#xff1a;https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1&#xff09;docker直接运行SRS服务&#xff1a; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5运行起来后可以http://localho…

数据恢复宝典:揭秘分区合并后的数据拯救之路

在计算机存储管理中&#xff0c;分区合并是一项常见的硬盘操作。它通过将两个或多个相邻的磁盘分区合并成一个更大的分区&#xff0c;来扩展存储空间或简化磁盘管理。然而&#xff0c;这个看似简单的操作背后&#xff0c;却隐藏着数据丢失的巨大风险。许多用户在尝试分区合并时…