JSON JOLT常用示例整理

news2024/10/7 20:25:15

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": ""
    }
  }
]

在这里插入图片描述

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

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

相关文章

【AIGC X UML 落地】从UML语句到UML图形的生成,来看Agent插件的制作

上篇我们讲到如何通过多智能体实现自然语言绘制UML图。 没有看过的,可以去看下原文:《【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图》 其中有一个实现重点,就是如何将 PlantUML 语句生成 UML 图片。在这里笔者是通过自定义 Agent 插件来实现这一流程。 本文,就此…

disql使用

进入bin目录:cd /opt/dmdbms/bin 启动disql:./disql,然后输入用户名、密码 sh文件直接使用disql: 临时添加路径到PATH环境变量:在当前会话中临时使用disql命令而无需每次都写完整路径,可以在执行脚本之前…

在非 antd pro 项目中使用 umi OpenAPI

大家好,我是松柏。自从跟着鱼皮哥使用了ant design pro中的OpenAPI插件之后,我已经无法忍受自己写请求后端接口的方法了,所以这篇文章记录一下如何在非ant design pro项目中使用OpenAPI。 安装依赖 首先我们需要安装包umijs/openapi&#x…

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 …

STM32 ADC精度提升方法

STM32 ADC精度提升方法 Fang XS.1452512966qq.com如果有错误&#xff0c;希望被指出&#xff0c;学习技术的路难免会磕磕绊绊量的积累引起质的变化 硬件方法 优化布局布线&#xff0c;尽量减小其他干扰增加电源、Vref去耦电容使用低通滤波器&#xff0c;或加磁珠使用DCDC时尽…

【驱动篇】龙芯LS2K0300之红外驱动

实验目标 编写HX1838红外接收器驱动&#xff0c;根据接收的波形脉冲解码红外按键键值 模块连接 模块连接&#xff1a;VCC接Pin 2&#xff0c;GND接Pin1&#xff0c;DATA接Pin16 驱动代码 HX1838 GPIO初始化&#xff0c;申请中断&#xff0c;注意&#xff1a;GPIO48默认是给…

Spring Boot 中 PGSQL 判断打卡点是否经过轨迹优化代码,循环查询物理表修改生成临时表,向临时表插入数据后再做ST_DWithin判断

记录一下一个业务问题&#xff0c;流程是这样的&#xff0c;我现在有一个定时任务&#xff0c;5分钟执行一次&#xff0c;更新车辆打卡的情况。现在有20俩车&#xff0c;每辆车都分配了路线&#xff0c;每条路线都有打卡点&#xff0c;每个打卡点分配了不同的时间段&#xff0c…

【动态规划 前缀和】2478. 完美分割的方案数

本文涉及知识点 划分型dp 动态规划汇总 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode 2478. 完美分割的方案数 给你一个字符串 s &#xff0c;每个字符是数字 ‘1’ 到 ‘9’ &#xff0c;再给你两个整数 k 和 minLength 。 如…

Redis---保证主从节点一致性问题 +与数据库数据保持一致性问题

保证主从节点一致性问题 Redis的同步方式默认是异步的&#xff0c;这种异步的同步方式导致了主从之间的数据存在一定的延迟&#xff0c;因此Redis默认是弱一致性的。 解决&#xff1a; 1.使用Redisson这样的工具&#xff0c;它提供了分布式锁的实现&#xff0c;确保在分布式环…

python自动化运维--DNS处理模块dnspython

1.dnspython介绍 dnspython是Pyhton实现的一个DNS工具包&#xff0c;他几乎支持所有的记录类型&#xff0c;可以用于查询、传输并动态更新ZONE信息&#xff0c;同事支持TSIG&#xff08;事物签名&#xff09;验证消息和EDNS0&#xff08;扩展DNS&#xff09;。在系统管理方面&a…

京东云备案流程图_云主机快速ICP备案_京东云服务器备案问题解答

京东云ICP备案流程&#xff0c;备案包括网站和APP备案&#xff0c;以及备案问题解答FAQ&#xff0c;阿腾云以京东云网站域名备案流程为例&#xff0c;先填写主办单位信息&#xff0c;选择网站备案或APP备案&#xff0c;申请授权码并验证&#xff0c;填写并上传主办单位详细信息…

老挝语翻译成简体中文推荐用什么翻译工具?《老挝语翻译通》App满足你所有翻译需求!

如果你正在找一款支持把老挝语翻译成中文&#xff0c;或者把中文翻译成老挝语的翻译工具&#xff0c;不得不推荐你使用《老挝语翻译通》App&#xff0c;您的随身老挝语翻译官&#xff0c;带您轻松跨越语言障碍。 功能亮点&#xff1a; 实时翻译&#xff1a;中文与老挝语的无缝…

论文阅读【时间序列】DSformer

论文阅读【时间序列】DSformer arxive: DSformer: A Double Sampling Transformer for Multivariate Time Series Long-term Prediction github: MTST 分类&#xff1a;多变量时间序列&#xff08;Multivariate time series&#xff09; 核心观点 多变量时间序列3个维度信息 …

一款十六进制编辑器,你的瑞士军刀!!【送源码】

软件介绍 ImHex是一款功能强大的十六进制编辑器&#xff0c;专为逆向工程师、程序员以及夜间工作的用户设计。它不仅提供了基础的二进制数据编辑功能&#xff0c;还集成了一系列高级特性&#xff0c;使其成为分析和修改二进制文件的理想工具。 功能特点 专为逆向工程、编程和夜…

Appium adb 获取appActivity

方法一&#xff08;最简单有效的方法&#xff09; 通过cmd命令&#xff0c;前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …

K6 性能测试教程:入门介绍,环境搭建和编写第一个 K6 测试脚本

K6 性能测试教程&#xff1a;入门介绍&#xff0c;环境搭建和编写第一个 K6 测试脚本 这篇文章将带您进入 K6 性能测试的世界。博文内容涵盖了 K6 性能测试的入门知识、环境搭建步骤&#xff0c;以及如何编写您的第一个测试脚本。无论您是初学者还是有经验的性能测试专业人员&…

剪映 v5.5 Pro Vip解锁版:使用指南与注意事项

摘要&#xff1a;本文介绍了剪映Pro VIP解锁版的使用方法&#xff0c;包括安装、测试和使用VIP素材的步骤&#xff0c;以及如何避免误报和保持解锁状态的建议。 正文&#xff1a; 剪映Pro是一款广受欢迎的视频编辑软件&#xff0c;提供了丰富的视频编辑功能和大量高质量的素材…

Python基础001

Python输出语句 print输出字符串 print("中国四大名著&#xff1a;","西游记|","三国演义|","红楼梦|","水浒传") print(6) print(1 1)Python输入语句 input函数 input() input("我的名字是&#xff1a;") p…

javaSE期末练习题

文章目录 前言一、程序控制1.顺序结构问题描述解题思路题解 2.选择结构2.1 题1问题描述解题思路题解 2.1 题2问题描述解题思路题解 3.循环结构3.1 阶乘的求取问题描述解题思路题解 3.2 水仙花数问题描述解题思路题解 二、数组三、类与对象1.类与对象1.1圆类问题描述解题思路题解…

【ES】--Elasticsearch的Nested类型介绍

目录 一、问题现象二、普通数组类型1、为什么普通数组类型匹配不准?三、nested类型四、nested类型查询操作1、只根据nested对象内部数组条件查询2、只根据nested对象外部条件查询3、根据nested对象内部及外部条件查询4、向nested对象数组追加新数据5、删除nested对象数组某一个…