JSON JOLT常用示例整理

JSON JOLT常用示例整理

1、什么是jolt

Jolt是用Java编写的JSON到JSON转换库,其中指示如何转换的"specification"本身就是一个JSON文档。以下文档中,我统一以 Spec 代替如何转换的"specification"json文档。以LHS(left hand side)代表Spec json的keys,RHS(right hand side)代表Spec json的values。部分示例都是摘取于Jolt源代码注释文档。

用处:

  1. 将从ElasticSearch、MongoDb、Cassandra等等取出的数据转换后输出出来
  2. 从大型JSON文档中提取数据供自己使用

2、常用网站

  • Jolt GitHub: https://github.com/bazaarvoice/jolt (opens new window)

  • Jolt online demo: https://jolt-demo.appspot.com

3、转换示例

3.1 基础转换

字段key转换,若转换中没有该key值,可以给默认值,json spec如下

[
  {
    "operation": "shift",
    "spec": {
      "user": {
        "username": ["NAME", "USERCODE"],
        "password": "PWD"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "SEX": "1"
    }
  }
]

在这里插入图片描述

3.2 字典判断转换

比如第三方传递过来的性别编码和自身系统的不一致,需要在json转换的时候进行转换

下面举例第三方返回的集合数据,进行数据转换

1、需要把性别编码

  • 1.2.156.112604.1.2.5.2—>0

  • 1.2.156.112604.1.2.5.3—>1

2、把患者年龄的【岁】字去掉,保留数字

json spec如下

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "patName": "data[&1].patientName",
          "patBirth": "data[&1].birthDay",
          "patPhone": "data[&1].phone",
          "patAddress": "data[&1].address",
          "patIdCard": "data[&1].idCardNumber",
          "patSexCode": {
            "1.2.156.112604.1.2.5.2": {
              //自身系统的性别未0 是男 ,1是女
              "#0": "data[&3].sex"
            },
            "1.2.156.112604.1.2.5.3": {
              "#1": "data[&3].sex"
            }
          },
          "ageStr": {
            "*岁": {
              "$(0,1)": "data[&3].age"
            }
          }
        }
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "count": 0,
      "status": true,
      "data": []
    }
  }, {
    "operation": "default",
    "spec": {
      "data[]": {
        "*": {
          "cardType": "1",
          "patientStatus": 0,
          "nation": "01"
        }
      }
    }
  	}
]

在这里插入图片描述

3.3 单字段转数组

{

“name”:“arr[]”

}

3.4 集合LIST中判断取值

第三方传递过来的数据是一个集合数据包含了(门诊号、病历号等等),需要根据不同的key值进行判断取值

在这里插入图片描述

输入json

{
  "patient": {
    "classCode": "PAT",
    "id": {
      "item": [
        {
          "extension": "02",
          "root": "1.2.156.112606.1.2.1.2"
        },
        {
          "extension": "30341855",
          "root": "1.2.156.112606.1.2.1.3"
        },
        {
          "extension": "8016698",
          "root": "1.2.156.112606.1.2.1.12"
        },
        {
          "extension": "305247745248301056",
          "root": "1.2.156.112606.1.2.1.13"
        },
        {
          "extension": "",
          "root": "1.2.156.112606.1.2.1.101"
        },
        {
          "extension": "8016698",
          "root": "1.2.156.112606.1.2.1.102"
        },
        {
          "extension": "202300079171",
          "root": "1.2.156.112606.1.2.1.103"
        }
      ]
    }
  }
}

转换的json spec

[
  {
    "operation": "shift",
    "spec": {
      "patient": {
        "id": {
          "item": {
            "*": {
              "root": {
                // 患者ID
                "1.2.156.112606.1.2.1.3": {
                  "@(2,extension)": "patientId"
                },
                //住院号
                "1.2.156.112606.1.2.1.12": {
                  "@(2,extension)": "inpatientNo"
                },
                //就诊标识
                "1.2.156.112606.1.2.1.13": {
                  "@(2,extension)": "encounterId"
                },
                //门诊病历号
                "1.2.156.112606.1.2.1.101": {
                  "@(2,extension)": "outpatientMedicalNo"
                },
                //住院病历号
                "1.2.156.112606.1.2.1.102": {
                  "@(2,extension)": "inHospitalMedicalNo"
                },
                //病案号
                "1.2.156.112606.1.2.1.103": {
                  "@(2,extension)": "bah"
                }
              }
            }
          }
        }
      }
    }
  }
]

3.5 取数组的第一个

获取数组的第一个对象值

输入json

{
  "data": [
    {
      "name": "zhangsan",
      "age": "22"
    },
    {
      "name": "lisi",
      "age": "33"
    }
  ],
  "status": "true"
}

转换json spec

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "0": "nameObj"
      }
    }
  }
]

在这里插入图片描述

3.6 多条件取值

满足下面条件

//a=1 赋值给字段c=123
//b=1 赋值给字段c=321
//如果都不满足给个默认值 c=888

输入json

{
    "a":"1",
    "b":"1"
 }

转换json spec

[
  {
    "operation": "shift",
    "spec": {
      "a": {
        "1": {
          "#123": "tempArr[]"
        }
      },
      "b": {
        "1": {
          "#321": "tempArr[]"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "tempArr": {
        "0": "c"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      //如果上面都不匹配,给一个默认值
      "c": "888"
    }
  }
]

在这里插入图片描述

3.7 字段字符串拼接

需要将下面的name1+name2+name3 拼接起来去掉为空的值

输入json

{
  "Request": {
    "Body": {
      "nameObj": {
        "name1": "hello",
        "name2": "world",
        "name3": "happy" 
      }
    }
  }   
}

转换json spec

[
  {
    "operation": "shift",
    "spec": {
      "Request": {
        "Body": {
          "nameObj": {
            "name1": "name1",
            "name2": "name2",
            "name3": "name3"
          }
        }
      }
    }
	},

  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "name1": {
        "null": null
      },
      "name2": {
        "null": null
      },
      "name3": {
        "null": null
      },
      "Request": {
        "Body": {
          "person": {
            //直接拼接
            "nameStr": "=concat(@(4,name1), @(4,name2),  @(4,name3))",
            //用-连接
            "nameStr2": "=concat(@(4,name1),'-', @(4,name2),'-',  @(4,name3))"
          }
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      // 指定要移除的字段的路径  
      "name1": "",
      "name2": "",
      "name3": ""
    }
  }
]

在这里插入图片描述

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

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

相关文章

kaggle量化赛金牌方案(第七名解决方案)

获奖文章(第七名解决方案) 致谢 我要感谢 Optiver 和 Kaggle 组织了这次比赛。这个挑战提出了一个在金融市场时间序列预测领域中具有重大和复杂性的问题。 方法论 我的方法结合了 LightGBM 和神经网络模型,对神经网络进行了最少的特征工程。目标是结合这些模型以降低最终…

arco disign vue 日期组件的样式穿透

问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…

收集了很久的全网好用的磁力搜索站列表分享

之前找资源的时候,收集了一波国内外大部分主流的磁力链接搜索站点。每一个站可能都有对应的优缺点,多试试,就能知道自己要哪个了。 全网好用的磁力链接 大部分的时候,我们用国内的就可以了,速度块,而且不…

Snappy使用

Snappy使用 Snappy是谷歌开源的压缩和解压的开发包,目标在于实现高速的压缩而不是最大的压缩 项目地址:GitHub - google/snappy:快速压缩器/解压缩器 Cmake版本升级 该项目需要比较新的cmake,CMake 3.16.3 or higher is requi…

51单片机第23步_定时器1工作在模式0(13位定时器)

重点学习51单片机定时器1工作在模式0的应用。 在51单片机中,定时器1工作在模式0,它和定时器0一样,TL1占低5位,TH1占高8位,合计13位,也是向上计数。 1、定时器1工作在模式0 1)、定时器1工作在模式0的框图…

8619 公约公倍

这个问题可以通过计算最大公约数 (GCD) 和最小公倍数 (LCM) 来解决。我们需要找到一个整数,它是 a, b, c 的 GCD 的倍数,同时也是 d, e, f 的 LCM 的约数。 以下是解决这个问题的步骤: 1. 计算 a, b, c 的最大公约数。 2. 计算 d, e, f 的最…

流处理系统对比:RisingWave vs ksqlDB

本文将从架构、部署与可扩展性、Source 和 Sink、生态系统与开发者工具几个方面比较 ksqlDB 和 RisingWave 这两款领先的流处理系统。 1. 架构 ksqlDB 是由 Confluent 开发和维护的流处理 SQL 引擎,专为 Apache Kafka 设计。它基于 Kafka Streams 构建,…

鸿蒙:路由Router原理

页面路由:在应用程序中实现不同页面之间的跳转和数据传递 典型应用:商品信息返回、订单等多页面跳转 页面栈最大容量为32个页面,当页面需要销毁可以使用router.clear()方法清空页面栈 router有两种页面跳转模式: router.pushUrl…

Golang 开发实战day15 - Input info

🏆个人专栏 🤺 leetcode 🧗 Leetcode Prime 🏇 Golang20天教程 🚴‍♂️ Java问题收集园地 🌴 成长感悟 欢迎大家观看,不执着于追求顶峰,只享受探索过程 Golang 开发实战day15 - 用户…

02归并排序——分治递归

02_归并排序_——分治_递归_ #include <stdio.h>void merge(int arr[], int l, int m, int r) {int n1 m -l 1;int n2 r -m;//创建临时数组int L[n1], R[n2];for(int i 0; i < n1; i){L[i] arr[l i];}for(int j 0; j < n2; j){R[j] arr[m 1 j];}int i …

OpenSSH RCE (CVE-2024-6387) | 附poc | 小试

Ⅰ 漏洞描述 OpenSSH 远程代码执行漏洞(CVE-2024-6387)&#xff0c;该漏洞是由于OpenSSH服务器 (sshd) 中的信号处理程序竞争问题&#xff0c;未经身份验证的攻击者可以利用此漏洞在Linux系统上以root身份执行任意代码。 Ⅱ 影响范围 8.5p1 < OpenSSH < 9.8p1 但OpenSS…

ghost恢复?电脑文件恢复如何操作?电脑数据恢复工具!5款!

在数字化时代&#xff0c;电脑数据的价值日益凸显。然而&#xff0c;数据丢失、误删、系统崩溃等问题时有发生&#xff0c;给个人和企业带来巨大损失。本文将为您详细介绍Ghost恢复方法&#xff0c;同时推荐五款高效的电脑数据恢复工具&#xff0c;助您轻松应对数据丢失的困扰。…

DreamTech联合南大和牛津发布最强3D内容生成大模型——Direct3D

文章链接&#xff1a;https://arxiv.org/pdf/2405.14832 github链接&#xff1a;https://nju-3dv.github.io/projects/Direct3D/ 从文本和图像生成高质量的3D资产一直是一项挑战&#xff0c;主要是由于缺乏能够捕捉复杂几何分布的可扩展3D表示。在这项工作中&#xff0c;介绍…

7.x86游戏实战-C++实现跨进程读写-跨进程写内存

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;6.x86游戏实战-C实现跨进程读写-通过基址读取人物状态标志位 上一个内容通过基…

试用笔记之-汇通周易(易经)字典软件

首先下载汇通周易字典软件 汇通周易(易经)字典软件 http://www.htsoft.com.cn/download/htzhouyi.rar 解压安装后&#xff0c;桌面图标 双击这个汇通周易字典图标

【AHK V2】 定时刷新窗口中的控件内容

在AutoHotkey v2 中设计GUI窗口,窗口中有个文本框,可以定时刷新内容。 时间周期可以通过窗口中的 下拉框来设定。 /************************************************************************* @description * @file 控件自动更新.ahk* @author sunwind1576157* @date 2024…

【信息系统项目管理师】18年~23年案例概念型知识

文章目录 18上18下19上19下20上20下21上21下22年上22年下23年上 18上 请简述 ISO 9000 质量管理的原则 领导作用、 过程方法、 管理的系统方法、 与供方互利的关系、 基于事实的决策方法、 持续改进、 全员参与、 以顾客为关注焦点 概念 国家标准(GB/T 1 9000 2008)对质量的定…

如何在Python中实现一个简单的爬虫程序

如何在Python中实现一个简单的爬虫程序 随着互联网的发展&#xff0c;数据已成为当今社会最宝贵的资源之一。而爬虫程序则成为了获取互联网数据的重要工具之一。本文将介绍如何在Python中实现一个简单的爬虫程序&#xff0c;并提供具体的代码示例。 确定目标网站 在开始编写爬…

数组-移除元素

移除元素 移除元素&#xff08;leetcode27&#xff09; var removeElement function(nums, val) {const n nums.length;let left 0;for (let right 0; right < n; right) {if (nums[right] ! val) {nums[left] nums[right];left;}}return left; };删除有序数组中的重复…

236、二叉树的最近公共祖先

前提&#xff1a; 所有 Node.val 互不相同 。p ! qp 和 q 均存在于给定的二叉树中。 代码如下&#xff1a; class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root q || root p || root NULL) return root;TreeN…