【御控物联】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…

Linux 使用C语言删除一个非空的目录

文章目录 一、简介二、代码演示 一、简介 Linux 下可以使用 rmdir 系统调用来删除一个目录&#xff0c;但是只能删除一个非空目录。 NAMErmdir - delete a directorySYNOPSIS#include <unistd.h>int rmdir(const char *pathname);DESCRIPTIONrmdir() deletes a directo…

comfyui使用错误解决

not found: IPAdapterApply 明明安装了还是报找不到节点。 使用这个版本&#xff1a;&#xff08;也许后期更新后&#xff0c;最新库也可以使用&#xff09; https://github.com/cubiq/ComfyUI_IPAdapter_plus/tree/6a411dcb2c6c3b91a3aac97adfb080a77ade7d38

Proxmox VE 实现批量增加多网络

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

企业管理者桌面监控软件怎么使用才是合情合理

桌面监控软件其实是一种通过监视和获取他人信息的手段。作为公司的管理者采用这种手段加强对公司的管理无可厚非&#xff0c;但是无论何人对桌面监控软件的应用都需要合情合理。 据悉&#xff0c;桌面监控软件常用于企业内网管理&#xff0c;主要是用在监督员工在上班时间内电脑…

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;期望能够借此来改变自己的命运&…

美团 - 运维开发 - 春招复盘(更新中)

美团运维开发复盘&#xff08;更新中&#xff09; 面试官很nice&#xff0c;感谢两位大佬&#xff0c;耐心回答了很多。 文章目录 美团运维开发复盘&#xff08;更新中&#xff09;待弄懂的面试题环境配置如何判断操作系统CPU&#xff0c;内存&#xff0c;IO&#xff0c;网络资…

西门子电动阀门

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

网络通信论

1. MQ使用什么协议 MQ(消息队列)使用的协议多种多样,其中最常见和流行的包括AMQP(高级消息队列协议)、MQTT和STOMP。这些协议都是基于TCP/IP的消息传递协议,用于在分布式系统中实现消息的传递、存储和分发。 AMQP是一个应用层协议,为面向消息的中间件设计,客户端与消…

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

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

对称加密何非对称加密的区别

对称加密和非对称加密是两种常见的加密方法&#xff0c;它们在多个方面存在显著的区别。 首先&#xff0c;从加密和解密过程来看&#xff0c;对称加密使用的是同一个密钥&#xff0c;即发送方和接收方都使用同一个密钥进行加密和解密。而非对称加密则采用两个密钥&#xff0c;…

BackTrader 中文文档(二)

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

机器学习入门项目二(逻辑回归)

如果输入数据长度为2&#xff0c;上一章的方程就无法满足需求了&#xff0c;需要修改方程&#xff1a; z w 1 x w 2 y b zw_1xw_2yb zw1​xw2​yb 数据产生器&#xff1a; import matplotlib.pyplot as plt import numpy as npclass DataGenerator2Input:"""…

css常见动画

1、音乐播放效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>制作竖条加载动画</title><style>.animbox {margin: 50px auto;width: 200px;text-align: center;}/*设置各竖条的共有样…

移植speexdsp到OpenHarmony标准系统④

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

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

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