当前位置: 首页 > news >正文

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

源JSON结构:

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

目标JSON结构:

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

转换需求:

以下需求分别执行

场景一:

  1. 将源结构的“a”值替换到目标结构的“b1[0]”中
  2. 将源结构的“a”值追加到目标结构的“b1[1]”中
  3. 将源结构的“a”值替换到目标结构的“b1[2]”中

场景二:

  1. 将源结构的“a[0]”值替换到目标结构的“b1[0]”中
  2. 将源结构的“a[0]”值追加到目标结构的“b1[1]”中
  3. 将源结构的“a[0]”值替换到目标结构的“b1[2]”中

场景三:

  1. 将源结构的“a[0]”值追加到目标结构的“b1[0]”中
  2. 将源结构的“a[1]”值追加到目标结构的“b1[0]”中
  3. 将源结构的“a[2]”值追加到目标结构的“b1[0]”中

三、代码实现

场景一:

  1. 将源结构的“a”值替换到目标结构的“b1[0]”中
  2. 将源结构的“a”值追加到目标结构的“b1[1]”中
  3. 将源结构的“a”值替换到目标结构的“b1[2]”中
import JsonTranferUtil from './json_transfer_new'
const jsonOrg = {"a": [[{"c_child": "2"}],[{"d_child": "3"}],[{"e_child": "4"}]]
};
const jsonAim = {"b1": [[{"k1_child": "v1_child"}],[{"k2_child": "v2_child"}],[{"k3_child": "v3_child"}]]
};
/// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"AimJsonPath": "root.b1[0]","OrgJsonPath": "root.a","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}},{"AimJsonPath": "root.b1[1]","OrgJsonPath": "root.a","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}},{"AimJsonPath": "root.b1[2]","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)

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

场景二:

  1. 将源结构的“a[0]”值替换到目标结构的“b1[0]”中
  2. 将源结构的“a[0]”值追加到目标结构的“b1[1]”中
  3. 将源结构的“a[0]”值替换到目标结构的“b1[2]”中

import JsonTranferUtil from './json_transfer_new'
const jsonOrg = {"a": [[{"c_child": "2"}],[{"d_child": "3"}],[{"e_child": "4"}]]
};
const jsonAim = {"b1": [[{"k1_child": "v1_child"}],[{"k2_child": "v2_child"}],[{"k3_child": "v3_child"}]]
};
/// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"AimJsonPath": "root.b1[0]","OrgJsonPath": "root.a[0]","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}},{"AimJsonPath": "root.b1[1]","OrgJsonPath": "root.a[0]","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}},{"AimJsonPath": "root.b1[2]","OrgJsonPath": "root.a[0]","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)

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

场景三:

  1. 将源结构的“a[0]”值追加到目标结构的“b1[0]”中
  2. 将源结构的“a[1]”值追加到目标结构的“b1[0]”中
  3. 将源结构的“a[2]”值追加到目标结构的“b1[0]”中

import JsonTranferUtil from './json_transfer_new'
const jsonOrg = {"a": [[{"c_child": "2"}],[{"d_child": "3"}],[{"e_child": "4"}]]
};
const jsonAim = {"b1": [[{"k1_child": "v1_child"}],[{"k2_child": "v2_child"}],[{"k3_child": "v3_child"}]]
};
/// 转换类型
/// 1:源Key->目标Key
/// 2:源Key->目标Value
/// 3:源Value->目标Key
/// 4:源Value->目标Value
const mappings = [{"AimJsonPath": "root.b1[0]","OrgJsonPath": "root.a[0]","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}},{"AimJsonPath": "root.b1[0]","OrgJsonPath": "root.a[1]","TranType": 4,"Options": {"KeyInitIndex": 0,"AddElementsOption": "1","TranOP": "1","TranWay": "1"}},{"AimJsonPath": "root.b1[0]","OrgJsonPath": "root.a[2]","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)

执行结果如下:

在这里插入图片描述

四、在线转换工具

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

工具地址:数据转换工具

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

五、技术资料

  • Github:edq-ebara/data-transformation-javascript: 数据转化(javascript) (github.com)
  • 技术探讨QQ群:775932762
  • 工具连接:数据转换工具

相关文章:

  • Java线程池详细解释
  • 软考中级(网络工程师考核要点)第一章 计算机网络系统(信道特性应用)第六期(4B/5B编码、数字调制技术和脉冲编码调制)
  • 通俗易懂:MySQL中如何用SQL语句模拟栈或队列的操作?
  • 16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串
  • Linux实战笔记(六) SSH
  • 如何根据黄金行情进行交易操作?
  • 信息安全技术基础知识总结
  • java ssh 电影院购票管理系统eclipse开发mysql数据库MVC模式java编程网页设计
  • 互联网轻量级框架整合之JavaEE基础II
  • 设计模式学习笔记 - 设计模式与范式 -结构型:4.适配器模式
  • 力扣刷题Days30-238. 除自身以外数组的乘积(js)
  • 软考中级(网络工程师考核要点)第一章 计算机网络系统(信道特性应用)第五期(曼彻斯特和差分曼彻斯特)重点考
  • 浅析MNN
  • Linux权限提升总结
  • 《新机器智能》的深度解读与感悟
  • [译]CSS 居中(Center)方法大合集
  • Docker容器管理
  • Idea+maven+scala构建包并在spark on yarn 运行
  • mysql innodb 索引使用指南
  • mysql外键的使用
  • React 快速上手 - 07 前端路由 react-router
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 工程优化暨babel升级小记
  • 开发基于以太坊智能合约的DApp
  • 目录与文件属性:编写ls
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 使用docker-compose进行多节点部署
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • puppet连载22:define用法
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (007)XHTML文档之标题——h1~h6
  • (vue)页面文件上传获取:action地址
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)LINQ之路
  • (转)Mysql的优化设置
  • .aanva
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net Redis的秒杀Dome和异步执行
  • .NET 表达式计算:Expression Evaluator
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net程序集学习心得
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [C]编译和预处理详解