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

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

目标JSON结构:

{
    "a": {
        "k": {
            "kk": "v"
        },
        "m": {
            "mm": "w"
        },
        "n": {
            "nn": "x"
        }
    }
}

转换需求:

以下需求分别执行

场景一:

  1. 将源结构的“b1”值替换到目标结构的“a.k”中
  2. 将源结构的“b1”值追加到目标结构的“a.m”中
  3. 将源结构的“b1”值替换到目标结构的“a.n”中

场景二:

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

场景三:

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

三、代码实现

场景一:

  1. 将源结构的“b1”值替换到目标结构的“a.k”中
  2. 将源结构的“b1”值追加到目标结构的“a.m”中
  3. 将源结构的“b1”值替换到目标结构的“a.n”中

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.k",
    "TranType": 4,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "2",
      "TranOP": "1",
      "TranWay": "1"
    }
  },
  {
    "OrgJsonPath": "root.b1",
    "AimJsonPath": "root.a.m",
    "TranType": 4,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "1",
      "TranOP": "1",
      "TranWay": "1"
    }
  },
  {
    "OrgJsonPath": "root.b1",
    "AimJsonPath": "root.a.n",
    "TranType": 4,
    "Options": {
      "KeyInitIndex": 0,
      "AddElementsOption": "2",
      "TranOP": "1",
      "TranWay": "1"
    }
  }
];
const jsonOrg = {
    "b1": [
      [
        {
          "k1_child": "v1_child"
        }
      ],
      [
        {
          "k2_child": "v2_child"
        }
      ],
      [
        {
          "k3_child": "v3_child"
        }
      ]
    ]
  };
const jsonAim ={
      "a": {
          "k": {
              "kk": "v"
          },
          "m": {
              "mm": "w"
          },
          "n": {
              "nn": "x"
          }
      }
  };

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

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

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

场景二:

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


import JsonTranferUtil from './json_transfer'

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


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

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

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

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

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


执行结果如下:

在这里插入图片描述

场景三:

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

import JsonTranferUtil from './json_transfer'

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


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

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

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/518419.html

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

相关文章

猫头虎分享已解决Bug: ERROR: Could not find a version that satisfies the requirement

猫头虎分享已解决Bug: ERROR: Could not find a version that satisfies the requirement 🐯💻 摘要 📄 大家好,我是猫头虎博主,今天我们要聊聊后端技术领域中的一个常见Bug:ERROR: Could not find a vers…

Linux第3课 Linux系统安装及换源方法

文章目录 Linux第3课 Linux系统安装及换源方法一、VMware虚拟机下系统的安装及配置(一)创建新的虚拟机 二、换源三、初次配置四、修改分辨率五、共享文件夹的实现(一)创建并查看共享文件夹 Linux第3课 Linux系统安装及换源方法 用…

java生成word

两种方案 一、poi-tl生成word <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency> public static void main(String[] args) throws Exception {String…

解决打印尺寸难题:精准打印证件复印件的软件

为什么打印复印件&#xff0c;尺寸总是不对&#xff0c;用尺子测量打印出来总是不一样。 每次打印复印件&#xff0c;不是大了就是小了&#xff0c;让人十分痛苦。收款牌和桌卡也总是尺寸不对&#xff0c;怎么办&#xff1f;打印的痛苦谁能懂&#xff1f;复印件、收款牌、桌卡…

DashOJ-8.奇偶统计

题目链接&#xff1a; 题目详情 - 奇偶统计 - DashOJ 思路&#xff1a; &#xff08;while循环加if分支语句&#xff09; 巧用死循环 while(1) 然后在里面第一句就判断输入的数字是否等于0 if(x0) &#xff0c;如果 等于0就直接break跳出循环 或者用 while(cin>>x) 代…

AI Kimi:帮助教师做好试卷命题

原文&#xff1a;https://www.toutiao.com/article/7353661304307778083/?log_fromcfd0a50014034_1712243146922 最近&#xff0c;Kimichat工具很火。这款软件不仅仅是一个聊天和阅读工具&#xff0c;还是一个强大的教学辅助工具。作为一位教师&#xff0c;尝试使用Kimichat&…

Flask-RESTful 分析

Flask-RESTful 是一个 Flask 扩展&#xff0c;它为构建 RESTful API 提供了方便的工具和资源。它简化了创建 RESTful 服务的过程&#xff0c;允许开发者专注于业务逻辑而不是 HTTP 协议的细节。 资源&#xff08;Resources&#xff09;&#xff1a; Resource 类&#xff1a;是…

【C++】模拟实现红黑树(插入)

目录 红黑树的概念 红黑树的性质 红黑树的调整情况 红黑树的模拟实现 枚举类型的定义 红黑树节点的定义 插入函数的实现 旋转函数的实现 左旋 右旋 自检函数的实现 红黑树类 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储…

数据结构进阶篇 之 【并归排序】(递归与非递归实现)详细讲解

都说贪小便宜吃大亏&#xff0c;但吃亏是福&#xff0c;那不就是贪小便宜吃大福了吗 一、并归排序 MergeSort 1.基本思想 2.实现原理 3.代码实现 4.归并排序的特性总结 二、非递归并归排序实现 三、完结撒❀ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀…

Leetcode链表刷题总结(Java版)

链表 1、移除链表元素&#xff08;考虑全情况&#xff09; 问题需求&#xff1a;根据给定的val值&#xff0c;移除链表中值是这个val的节点 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 这里有一个问题就是&#xff0c;如果需要被移除的节点不是中间的某个节点…

【蓝桥杯嵌入式】六、真题演练(二)-1研究篇:第 13 届真题-第二部分

温馨提示&#xff1a; 真题演练分为模拟篇和研究篇。本专栏的主要作用是记录我的备赛过程&#xff0c;我打算先自己做一遍&#xff0c;把遇到的问题和不同之处记录到演练篇&#xff0c;然后再返回来仔细研究一下&#xff0c;找到最佳的解题方法记录到研究篇。题目在&#xff1a…

【CSS】浮动笔记及案例

CSS浮动 1. 认识浮动 float属性可以指定一个元素沿着左侧或者是右侧放置&#xff0c;允许文本和内联元素环绕它 float属性最初只使用文字环绕图片但却是早起CSS最好用的左右布局方案 绝对定位、浮动都会让元素脱标&#xff0c;以达到灵活布局的目的可以通过float属性让元素脱…

SSM实战项目——哈哈音乐(二)后台模块开发

1、项目准备 ① 引入后台模块&#xff08;hami-console&#xff09;需要的依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…

【Qt】:常用控件(五:显示类控件)

常用控件 一.ProgressBar二. Calendar Widget 一.ProgressBar 使⽤ QProgressBar 表⽰⼀个进度条 代码⽰例:设置进度条按时间增⻓ 设置定时器&#xff0c;每个0.1秒&#xff0c;让进度条1 在实际开发中&#xff0c;进度条的取值&#xff0c;往往是根据当前任务的实际进度来进行…

创意绘图画画小程序:融合白板黑板功能,开启绘画新纪元

创意绘图画画小程序&#xff1a;融合白板黑板功能&#xff0c;开启绘画新纪元 在数字化时代的浪潮下&#xff0c;艺术创作正逐渐摆脱传统形式的束缚&#xff0c;以更加多元、便捷的方式走进人们的生活。其中&#xff0c;创意绘图画画小程序以其独特的白板画、黑板画功能&#…

蓝桥杯真题:k倍区间

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int k sc.nextInt();int[] a new int[n];long[] v new long[200000];long…

【注册中心】ZooKeeper

文章目录 概述Zookeeper的应用场景Zookeeper的角色Zookeeper 的数据模型zookeeper客户端常用命令Zookeeper的核心功能Zookeeper的架构与集群规则Zookeeper的工作模式Zookeeper如何实现分布式锁Zookeeper JavaAPI&#xff08;Curator&#xff09;来源 概述 Zookeeper 是一个开源…

手写防抖节流、手写深拷贝、事件总线

一、防抖 手写防抖--基本实现&#xff08;面试&#xff09; 手写防抖并且绑定this和event 添加取消功能 添加立即执行状态&#xff0c;默认不立即执行 underscore库介绍&#xff0c;lodash更轻量级 二、节流 用underscore库&#xff0c;调用throttle函数 手写基础版节流-&#…

Spring重点知识(个人整理笔记)

目录 1. 为什么要使用 spring&#xff1f; 2. 解释一下什么是 Aop&#xff1f; 3. AOP有哪些实现方式&#xff1f; 4. Spring AOP的实现原理 5. JDK动态代理和CGLIB动态代理的区别&#xff1f; 6. 解释一下什么是 ioc&#xff1f; 7. spring 有哪些主要模块&#xff1f;…

数据结构系列-队列的结构和队列的实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO&#xff0c;…