【御控工业物联网】JAVA JSON结构转换、JSON结构重构、JSON结构互换(5):对象To对象——转换映射方式

御控官网:https://www.yu-con.com/

文章目录

  • 御控官网:[https://www.yu-con.com/](https://www.yu-con.com/)
  • 一、JSON结构转换是什么?
  • 二、术语解释
  • 三、案例之《JSON对象 To JSON对象》
  • 四、代码实现
  • 五、在线转换工具
  • 六、技术资料


一、JSON结构转换是什么?

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

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

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

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

二、术语解释

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 com.fasterxml.jackson.databind.ObjectMapper;

import java.util.ArrayList;
import java.util.List;

/**
 * 对象转换对象
 */
public class Main {

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();

        String orgJson = "{\"a\":{\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串
        String aimJson = "{\"b1\":{\"k2\":{\"k2_child\":\"v2_child\"},\"k3\":{\"k3_child\":\"v3_child\"}}}"; // JSON字符串


        List<JsonMapping> jsonMappings = new ArrayList<>();
        jsonMappings.add(new JsonMapping("root.b1.*", "root.a.c", 4,new JsonMappingOptions(0,1,1,1)));


        JsonTranferUtil jsonTranferUtil = null;
        String result ="";

        try {
            jsonTranferUtil = new JsonTranferUtil(orgJson, aimJson, jsonMappings);
            result = jsonTranferUtil.tranJson();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("******************结果 **********************");

        System.out.println(result);
    }
}

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

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

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.ArrayList;
import java.util.List;
/**
 * 对象转换对象
 */
public class Main {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        String orgJson = "{\"a\":{\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串
        String aimJson = "{\"b1\":{\"k2\":{\"k2_child\":\"v2_child\"},\"k3\":{\"k3_child\":\"v3_child\"}}}"; // JSON字符串
        List<JsonMapping> jsonMappings = new ArrayList<>();
        jsonMappings.add(new JsonMapping("root.b1.k2", "root.a.*", 4,new JsonMappingOptions(0,1,1,1)));
        JsonTranferUtil jsonTranferUtil = null;
        String result ="";
        try {
            jsonTranferUtil = new JsonTranferUtil(orgJson, aimJson, jsonMappings);
            result = jsonTranferUtil.tranJson();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("******************结果 **********************");
        System.out.println(result);
    }
}

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

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

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.ArrayList;
import java.util.List;
/**
 * 对象转换对象
 */
public class Main {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        String orgJson = "{\"a\":{\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串
        String aimJson = "{\"b1\":{\"k2\":{\"k2_child\":\"v2_child\"},\"k3\":{\"k3_child\":\"v3_child\"}}}"; // JSON字符串
        List<JsonMapping> jsonMappings = new ArrayList<>();
        jsonMappings.add(new JsonMapping("root.b1.*", "root.a.*", 4,new JsonMappingOptions(0,1,1,1)));
        JsonTranferUtil jsonTranferUtil = null;
        String result ="";
        try {
            jsonTranferUtil = new JsonTranferUtil(orgJson, aimJson, jsonMappings);
            result = jsonTranferUtil.tranJson();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("******************结果 **********************");
        System.out.println(result);
    }
}

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

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

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.ArrayList;
import java.util.List;
/**
 * 对象转换对象
 */
public class Main {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        String orgJson = "{\"a\":{\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串
        String aimJson = "{\"b1\":{\"k2\":{\"k2_child\":\"v2_child\"},\"k3\":{\"k3_child\":\"v3_child\"}}}"; // JSON字符串
        List<JsonMapping> jsonMappings = new ArrayList<>();
        jsonMappings.add(new JsonMapping("root.b1.*", "root.a.*", 4,new JsonMappingOptions(0,1,1,2)));
        JsonTranferUtil jsonTranferUtil = null;
        String result ="";
        try {
            jsonTranferUtil = new JsonTranferUtil(orgJson, aimJson, jsonMappings);
            result = jsonTranferUtil.tranJson();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("******************结果 **********************");
        System.out.println(result);
    }
}

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

五、在线转换工具

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

工具地址:数据转换工具

在这里插入图片描述

六、技术资料

  • Github:edq-ebara/data-transformation-javascript: 数据转化(javascript) (github.com)
  • 技术探讨QQ群:775932762
  • 工具连接:数据转换工具
  • 御控官网:https://www.yu-con.com/

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

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

相关文章

MySQL索引为什么选择B+树,而不是二叉树、红黑树、B树?

12.1.为什么没有选择二叉树? 二叉树是一种二分查找树,有很好的查找性能,相当于二分查找。 二叉树的非叶子节值大于左边子节点、小于右边子节点。 原因: 但是当N比较大的时候,树的深度比较高。数据查询的时间主要依赖于磁盘IO的次数,二叉树深度越大,查找的次数越多,性能…

openstack-镜像封装 7

再克隆两台主机并且安装图形化组件和虚拟化组件 进入图形化界面并安装一个虚拟化管理器 根下创建一个目录&#xff0c;虚拟化管理器新添加一个路径 创建虚拟化 配置虚拟化主机 设置虚拟化主机配置 安装所需软件 清理创建云主机时安装的组件 主机安装虚拟化工具 清理虚拟化缓存 …

Mysql全局优化总结

Mysql全局优化总结 从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间 服务端系统参数 官方文档&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_connections…

x汽车登陆网站登陆rsa加密逆向

声明&#xff1a; 本文章内容仅供学习交流&#xff0c;不用于其他其他任何目的&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c; 各位看官好哇&#xff0c;今天给大家带来一篇web自动化逆向的文章&#xff0c;如下图当前我…

CMplot rMVP | 全基因组曼哈顿图和QQ图轻松可视化!

文章目录 1.CMplot1.1 CMplot介绍1.2 CMplot-DEMO1.3 CMplot参数 2.rMVP2.1 rMVP介绍2.2 rMVP-DEMO2.3 rMVP参数 1.CMplot 1.1 CMplot介绍 CMplot&#xff1a;https://github.com/YinLiLin/CMplot 这是一个做全基因组对SNP可视化神器了&#xff0c;尹立林教授写的R包。主打两…

Uptime Kuma 使用指南:一款简单易用的站点监控工具

我平时的工作会涉及到监控&#xff0c;而站点是一个很重要的监控项。项目上线后&#xff0c;我们通常会将站点监控配置到云平台上&#xff0c;以检测各站点的连通性。但随着项目不断增多&#xff0c;云平台上的配额就有点捉急了。针对这个情况&#xff0c;我们可以试试这个开源…

GPT-SoVITS声音克隆训练和推理(新手教程,附整合包)

环境: Win10 专业版 GPT-SoVITS-0421 整合包 问题描述: GPT-SoVITS声音克隆如何训练和推理教程 解决方案: Zero-shot TTS: Input a 5-second vocal sample and experience instant text-to-speech conversion.零样本 TTS:输入 5 秒的人声样本并体验即时文本到语音转换…

CentOS-7安装Mysql并允许其他主机登录

一、通用设置&#xff08;分别在4台虚拟机设置&#xff09; 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服…

设计模式-00 设计模式简介之几大原则

设计模式-00 设计模式简介之几大原则 本专栏主要分析自己学习设计模式相关的浅解&#xff0c;并运用modern cpp 来是实现&#xff0c;描述相关设计模式。 通过编写代码&#xff0c;深入理解设计模式精髓&#xff0c;并且很好的帮助自己掌握设计模式&#xff0c;顺便巩固自己的c…

【架构方法论(一)】架构的定义与架构要解决的问题

文章目录 一. 架构定义与架构的作用1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构&#xff1a;4R 架构 二、架构设计的真正目的-别掉入架构设计的误区1. 是为了解决软件复杂度2. 简单的复杂度分析案例 三. 案例思考 本文关键字 架构定义 架构与系统的关系从业务逻…

【亲测有用】idea2024.1中前进后退按钮图标添加

idea更新后&#xff0c;前进后退按钮消失了&#xff0c;现在说下怎么设置 具体操作如下&#xff1a; 1、选择 File / Settings(windows版)&#xff0c;或者Preferences(mac版) 2、打开 Appearance & Behavior 并选择 Menus and Toolbars 3、选择右侧的 “Main toolbar lef…

第四百七十七回

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容&#xff0c;本章回中将介绍GetMaterialApp组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…

C++:模板(初级)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;模板&#xff08;初级&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞…

Docker 网络与资源控制

一 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根 据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默 认网关。因为在同…

C++从入门到出门

C 概述 c 融合了3中不同的编程方式&#xff1a; C语言代表的过程性语言C 在C语言基础上添加的类代表的面向对象语言C 模板支持的泛型编程 1、在c语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是c得用法改变了&#xff0c;c头文件没有扩展名。但是…

Linux gcc day7

动态链接和静态链接 形成的可执行的程序小&#xff1a;节省资源--内存&#xff0c;磁盘 无法c静态库链接的方法 原因是我们没有安装静态c库&#xff08;.a&#xff09; 所以要安装 sudo yum install -y glibc-static gcc static静态编译选项提示错误&#xff1a;/usr/lib/ld:ca…

9.Eureka服务发现+Ribbon+RestTemplate服务调用

order-service服务通过服务名称来代替 ip:port的方式访问user-service服务的接口。 原来的请求代码&#xff1a; Service public class OrderServiceImpl implements OrderService {Autowiredprivate OrderMapper orderMapper;Autowiredprivate RestTemplate restTemplate;Ov…

DataGrip操作Oracle

一、创建表空间 表名任意起&#xff0c;路径自己指定 -- 创建表空间 create tablespace mydb1 -- 表名 datafile E:\Code\sql\oracle\oracle_tablespace\mydb1.dbf --指定表空间路径 size 100M --指定表空间大小 autoextend on next 50M --指定一次扩充多少mb extent managemen…

入门指南:网站UI原型设计的简单方法

从零开始做网站UI原型设计&#xff0c;真的很有成就感&#xff01;那么&#xff0c;UI设计师从零开始做网站UI原型设计需要经历哪些过程呢&#xff1f;设计网站UI原型的第一步&#xff1a;绘制网站线框。本文将主要分为两个阶段&#xff1a;网站线框和原型绘制。 如何制作网站…