【御控物联】Java JSON结构转换(3):对象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": {"b": "1","c": {"c_child": "2"},"d": {"d_child": "3"}}
}

目标JSON结构:

{"b1": {"k1": "v1","k2": {"k2_child": "v2_child"},"k3": {"k3_child": "v3_child"}}
}

转换需求:

以下需求分别执行

场景一:

  1. 将源结构的“a”值替换到目标结构的“b1.k1”中
  2. 将源结构的“a”值追加到目标结构的“b1.k2”中
  3. 将源结构的“a”值替换到目标结构的“b1.k3”中

场景二:

  1. 将源结构的“a.b”值替换到目标结构的“b1.k1”中
  2. 将源结构的“a.b”值追加到目标结构的“b1.k2”中
  3. 将源结构的“a.b”值替换到目标结构的“b1.k3”中

场景三:

  1. 将源结构的“a.b”值追加到目标结构的“b1.k2”中
  2. 将源结构的“a.c”值追加到目标结构的“b1.k2”中
  3. 将源结构的“a.d.d_child”值追加到目标结构的“b1.k2”中

三、代码实现

场景一:

  1. 将源结构的“a”值替换到目标结构的“b1.k1”中
  2. 将源结构的“a”值追加到目标结构的“b1.k2”中
  3. 将源结构的“a”值替换到目标结构的“b1.k3”中
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\":{\"b\":\"1\",\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串String aimJson = "{\"b1\":{\"k1\":\"v1\",\"k2\":{\"k2_child\":\"v2_child\"},\"k3\":{\"k3_child\":\"v3_child\"}}}"; // JSON字符串List<JsonMapping> jsonMappings = new ArrayList<>();jsonMappings.add(new JsonMapping("root.b1.k1", "root.a", 4,new JsonMappingOptions(0,2,1,1)));jsonMappings.add(new JsonMapping("root.b1.k2", "root.a", 4,new JsonMappingOptions(0,1,1,1)));jsonMappings.add(new JsonMapping("root.b1.k3", "root.a", 4,new JsonMappingOptions(0,2,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);    }

执行结果如下:

在这里插入图片描述

场景二:

  1. 将源结构的“a.b”值替换到目标结构的“b1.k1”中
  2. 将源结构的“a.b”值追加到目标结构的“b1.k2”中
  3. 将源结构的“a.b”值替换到目标结构的“b1.k3”中
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\":{\"b\":\"1\",\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串String aimJson = "{\"b1\":{\"k1\":\"v1\",\"k2\":{\"k2_child\":\"v2_child\"},\"k3\":{\"k3_child\":\"v3_child\"}}}"; // JSON字符串List<JsonMapping> jsonMappings = new ArrayList<>();jsonMappings.add(new JsonMapping("root.b1.k1", "root.a.b", 4,new JsonMappingOptions(0,2,1,1)));jsonMappings.add(new JsonMapping("root.b1.k2", "root.a.b", 4,new JsonMappingOptions(0,1,1,1)));jsonMappings.add(new JsonMapping("root.b1.k3", "root.a.b", 4,new JsonMappingOptions(0,2,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);}
}

在这里插入图片描述

场景三:

  1. 将源结构的“a.b”值追加到目标结构的“b1.k2”中
  2. 将源结构的“a.c”值追加到目标结构的“b1.k2”中
  3. 将源结构的“a.d.d_child”值追加到目标结构的“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\":{\"b\":\"1\",\"c\":{\"c_child\":\"2\"},\"d\":{\"d_child\":\"3\"}}}"; // JSON字符串String aimJson = "{\"b1\":{\"k1\":\"v1\",\"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.b", 4,new JsonMappingOptions(0,1,1,1)));jsonMappings.add(new JsonMapping("root.b1.k2", "root.a.c", 4,new JsonMappingOptions(0,1,1,1)));jsonMappings.add(new JsonMapping("root.b1.k2", "root.a.d.d_child", 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);}
}

执行结果如下:

在这里插入图片描述

四、在线转换工具

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

工具地址:数据转换工具
在这里插入图片描述

五、技术资料

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

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

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

相关文章

【电控笔记6.2】拉式转换与转移函数

概要 laplace&#xff1a;单输入单输出&#xff0c;线性系统 laplace 传递函数 总结

Spring GA、PRE、SNAPSHOT 版本含义及区别

GA:General Availability: 正式发布的版本&#xff0c;推荐使用&#xff08;主要是稳定&#xff09;&#xff0c;与maven的releases类似&#xff1b; PRE: 预览版,内部测试版。主要是给开发人员和测试人员测试和找BUG用的&#xff0c;不建议使用&#xff1b; SNAPSHOT: 快照…

算法学习系列(四十九):最长上升子序列模型(一)

目录 引言一、最长上升子序列二、怪盗基德的滑翔翼三、登山四、合唱队形五、友好城市六、最大上升子序列和 引言 今天学习的是最长上升子序列模型&#xff0c;这种模型我觉得就是我之前说过的就是相当于记忆的过程&#xff0c;记住遇到这种题是用这种模型&#xff0c;下次遇见…

打开电脑底部导航栏的任务

from pywinauto import Application app Application("uia").connect(path"explorer") app["任务栏"].print_control_identifiers() task app["任务栏"].child_window(title"酷狗音乐", auto_id"D:\soft\kugou\KGMus…

Proxmox VE 实现批量增加多网络

前言 实现批量创建多网络&#xff0c;更改主机名称&#xff0c;hosts解析 初始化网卡&#xff0c;主机名称&#xff0c;hosts解析&#xff0c;重启网卡 我的主机六个网卡&#xff0c;使用的有四个网卡&#xff0c;以下一键创建和初始化主机名称我是以硬件的SN号最为主机的名…

Matlab调C/C++简单模板例子

如果你是需要快速搭建一个matlab调c/c环境&#xff0c;这篇文章可以参考 有了c代码&#xff0c;想在matlab里面调用&#xff0c;可以参考我这个模板 matlab调用代码&#xff1a; clear all close all clcinput1 1; input2 2;[output1,output2] mexfunction(input1,input2);…

普通人做抖音小店真的能赚钱吗?可以,但更取决于个人

大家好&#xff0c;我是电商花花。 现在做抖音小店的基本上都是一些新商家&#xff0c;对于我们众多零基础的朋友来说&#xff0c;是期待也是一份挑战。 抖音小店作为一个充满机会的新兴平台&#xff0c;许多人都欣喜的投入其中&#xff0c;期望能够借此来改变自己的命运&…

西门子电动阀门

一、西门子电动调节阀 二、西门子电动调节蝶阀 1、阀门 2、执行器

客户资料不翼而飞?企业数据保护攻略

在数字化经济时代&#xff0c;企业的客户资料等同于商业生命线&#xff0c;一旦泄露&#xff0c;后果不堪设想。例如&#xff0c;2017年Equifax的数据泄露事件&#xff0c;造成超过1.4亿用户的个人信息外泄&#xff0c;不仅给用户带来风险&#xff0c;也让公司名誉受损&#xf…

BackTrader 中文文档(二)

原文&#xff1a;www.backtrader.com/ 概念 平台概念 原文&#xff1a;www.backtrader.com/docu/concepts/ 这是平台某些概念的集合。它试图收集可在使用平台时有用的信息片段。 开始之前 所有小代码示例都假设以下导入可用&#xff1a; import backtrader as bt import ba…

移植speexdsp到OpenHarmony标准系统④

五、在OpenHarmony编译体系下增量编译Speexdsp 建议先增量编译生成三方库的动态链接库和可执行文件,验证是否成功把三方库加入OpenHarmonybian编译体系。 成功编译出so和可执行文件&#xff0c;即成功把三方库加入到ohos编译体系。之后还要验证三方库在ohos运行&#xff0c;功…

英语新概念2-回译法-lesson8

乔桑德斯有着我们镇上最漂亮的花园。附近的每一个人每年都参加“最美花园比赛”&#xff0c;但是每年都是乔赢得比赛。比尔芙丽丝的花园比乔的花园大&#xff0c;但是乔的花园更有趣。他有整洁的小径以及一座木桥架在一个池塘上。我也喜欢花园&#xff0c;但是我不喜欢辛勤劳作…

企业网络日益突出的难题与SD-WAN解决方案

随着企业规模的迅速扩张和数字化转型的深入推进&#xff0c;企业在全球范围内需要实现总部、分支机构、门店、数据中心、云等地点的网络互联、数据传输和应用加速。SD-WAN作为当今主流解决方案&#xff0c;在网络效率、传输质量、灵活性和成本等方面远远超越传统的互联网、专线…

【经典算法】LeetCode 136:只出现一次的数字(Java/C/Python3实现含注释说明,Easy)

个人主页&#xff1a; 进朱者赤 阿里非典型程序员一枚 &#xff0c;记录平平无奇程序员在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; 目录 题目描述思路及实现方式一&#xff1a;使用异或运算&#xff08;推荐&#xff09;思…

【论文笔记 | 异步联邦】Asynchronous Federated Optimization

论文信息 Asynchronous Federated Optimization&#xff0c;OPT2020: 12th Annual Workshop on Optimization for Machine Learning&#xff0c;不属于ccfa introduction 背景&#xff1a;联邦学习有三个关键性质 任务激活不频繁&#xff08;比较难以达成条件&#xff09;&…

C++ ─── 操作符重载和赋值重载

目录 赋值运算符重载 运算符重载 赋值运算符重载&#xff08;赋值重载operator&#xff09; 前置和后置重载 赋值运算符重载 运算符重载 C为了增强代码的可读性引入了运算符重载 &#xff0c; 运算符重载是具有特殊函数名的函数 &#xff0c;也具有其返回值类型&#xff0c…

某手滑块逆向流程分析

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cua3VhaXNob3UuY29tL3Byb2ZpbGUvM3h4Ymt3ZDhta250ZWFj 参数流程…

开发工具:推荐一款实用的浏览器查看json插件(附下载)

目录 插件简介 支持的 mime类型 插件特点 “Tree”视图支持的快捷键列表: “Code”视图支持的快捷键列表: 安装方法 使用效果 插件简介 “JSON Beautifier”扩展程序是一个实用工具&#xff0c;可方便查看、编辑、格式化、验证和导出JSON页面。该扩展程序无需任何设置即可运行…

# Nacos 服务发现-Spring Cloud Alibaba 综合架构实战(四) -实现 service2 子模块。

Nacos 服务发现-Spring Cloud Alibaba 综合架构实战&#xff08;四&#xff09; -实现 service2 子模块。 1、在 service2 子模块下的 service-2-api 二级子工程中&#xff0c;定义服务接口 创建 ProviderService.java /*** C:\java-test\idea2019\nacos_discovery\nacos-mi…

【Java开发指南 | 第三篇】Java 空行、强制类型转换及基本数据类型

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 Java 空行强制类型转换Java 基本数据类型内置数据类型引用类型 Java 空行 空白行或者有注释的行&#xff0c;Java 编译器都会忽略掉。 强制类型转换 当需要将一个数据类型转换为另一个数据类型时&#xff0c…