一、什么是JOLT

  1. json与json转换的库,是一个很强大的json转json的工具。
  2. 在我们涉及Cassandra、ElasticSearch、Mongo的时候,很有可能就有这方面的需求。另写代码又不灵活,使用JOLT就很好了。
  3. 基本流程就是输入JSON格式数据A,使用Jolt描述语言(也是JSON ),得到想要的JSON格式数据B。

二、JOLT的理念

  1. 输入的数据(数据的节点),它要输出到输出数据的哪个位置?

image.png

  1. // JSON Input
  2. {
  3. "rating": {
  4. "quality": {
  5. "value": 3
  6. },
  7. "primary": {
  8. "value": 4
  9. }
  10. }
  11. }
  12. // JSON Transformation DSL
  13. [{
  14. "operation": "shift",
  15. "spec": {
  16. "rating": {
  17. "primary": {
  18. "value": "Rating"
  19. },
  20. "quality": {
  21. "value": "SecondaryRating.quality.value"
  22. }
  23. }
  24. }
  25. }]
  26. // JSON Output
  27. {
  28. "Rating": 4,
  29. "SecondaryRating": {
  30. "quality": {
  31. "value": 3
  32. }
  33. }
  34. }
  1. 要确定输出的格式 ,你想要什么样格式的输出Json?
  2. 使用 jolt规范语言去描述json转换动作。

三、JOLT语法-shift

1、概述

  1. Jolt其实是操作map
  2. 每一个小的转换都是基于一个DSL
  3. 可以把若干个小的转换串(chain )起来
  4. 基本样式如下: ```json [{ “operation”: “shift”, “spec”: { … } }]

[{ “operation”: “java”, “classname”: “com.bazaar..” “spec”: { … // optional } }]

[{ “operation”: “default” “spec”: { … } }]

// operation:”shift” // operation:”default” // operation:”remove” // operation:”sort” // operation:”java” ```

2、语法讲解

注:以下会以示例为先,在示例中层层递进得讲述jolt的语法规则。有输入数据,有想要输出数据的格式,那么关键就是这个Jolt Spec 怎么写?
image.png
2.1 先看正确的写法
image.png

2.1 字符串匹配(精确匹配)

  1. jolt spec 最简单的理解就是 (前面提过,将json当做map处理)key是“匹配”,value是“去哪”,告诉程序,匹配哪部分数据,这部分数据在输出数据的什么位置 。
  2. demo

    1. 匹配输入数据,并将匹配到的数据发送到输出数据的两个位置:
    2. 匹配输入数据多个值,发送到输出数据同一个位置:

      2.2 通配符【*】

  3. 【*】是匹配输出数据一个节点下的所有子节点

  4. 【*】通配符的匹配优先级是在精确 匹配之后的
  5. demo

image.png

2.3 通配符【&】

  1. 【&】是匹配输出数据的【key】,将【key】当做数据来使用。
  2. 【&】其实是取【*】(或其他)匹配到的节点的【key】。
  3. 【&】是在描述-数据发送到输出数据 的什么位置上使用的,即jolt spet 的json脚本中的 value里(冒号右边)。
  4. demo

image.png

  1. 在上面示例中& &(0) &(0,0)都是等价的,拿到的key是: stats—colour—196—avgRating
  2. &(0,1) 取到的是 第一个通配符 * 匹配到的key值 :colour
  3. &(0,2) 取到的是 第二个通配符 * 匹配到的key值 :196

    2.4 通配符【$】

  1. 【$】是在描述-数据发送到输入数据 的什么位置上使用的,即jolt spet 的Json脚本中的 key里(冒号左 边)。
  2. 取值 含义与【&】基本一样 。

2.5 通配符【@】

  1. 匹配value

2.6 通配符【[#2]】

  1. [] 是数组的意思,中间的#2值表示数组的下标,这里的#2会通过计算获取到第一个*所匹配到的数组下标。

版权声明:本文为CSDN博主「酷酷的诚(公众号:Panda诚)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36048246/article/details/89287200