jolt json to json mapping第一篇

本文详细解读了JOLT库在JSON映射中的应用,包括各种操作模式如Shift、默认输出、添加前缀、转换结构等,通过实例展示了如何进行JSON数据的转换和操作。
摘要由CSDN通过智能技术生成

demo 解读

本文的主要目的是整理梳理对于jolt json的使用,主要使用场景就是json mapping

模式的含义

  • shift 清空后输出
  • default 直接输出,类似于增量
* 匹配所有
& 取key值	    出现在value里 	    例子:&=&0当前层级  &1向上1级		value里没有能力获取key值但是可以通过*,$配合使用
$ 取key值	    出现在key里		    同上
@ 取value值	    出现在key里		    例子:@(3,clientId)  @取value值 {
   {
   {从上往下3级,到clientId,hidden,取clientId的值
# 固定输出值	出现在key里或value里

盗梦空间 - Inception

josn input

{
  "rating": {
    "primary": {
      "value": 3
    },
    "quality": {
      "value": 3
    }
  }
}

json spec

[
  {
  //shfit清空后输出
    "operation": "shift",
    "spec": {
      "rating": {
        "primary": {
          // 获取rating.primary.value值 重命名为Rating
          "value": "Rating"
        },
        // *表示匹配所有json数据,*优先级最低,却明确越优先,所有下面不会处理primary
        "*": {
          // &1 means, go up one level and grab that value and substitute it in
          // &1表示,向上一级,获取那个值并代入
          // 下面这个场景 &1 = "quality"
          //SecondaryRatings就是命名的一个固定的字段而已,Value也是
          //SecondaryRatings.quality.Value=3
          "value": "SecondaryRatings.&1.Value",
         
          // "$"表示把input中json的key拿过来
          "$": "SecondaryRatings.&1.Id"
        }
      }
    }
  },
  {
  //default直接输出,类似于增量
    "operation": "default",
    "spec": {
      "Range": 5,
      "SecondaryRatings": {
        "*": {
          // SecondaryRatings下都会加上ChildRange=5
          "ChildRange": 5
        }
      }
    }
  }
]

json output

{
  "Rating" : 3,
  "SecondaryRatings" : {
    "quality" : {
      "Id" : "quality",
      "Value" : 3,
      "ChildRange" : 5
    }
  },
  "Range" : 5
}

给所有key添加rating-前缀 - Convert nested data, to 'prefix soup'.

json input

{
  "Rating": 1,
  "SecondaryRatings": {
    "Design": 4,
    "Price": 2,
    "RatingDimension3": 1
  }
}

json spec

[
  {
    "operation": "shift",
    "spec": {
    //Rating重命名为rating-primary
    //rating-primary=1
      "Rating": "rating-primary",
      // 将所有二级评级转换为前缀数据
      "SecondaryRatings": {
        //&表示&0,也就是向上0级,就是当前级
        "*": "rating-&"
      }
    }
  }
]

json output

{
  "rating-primary" : 1,
  "rating-Design" : 4,
  "rating-Price" : 2,
  "rating-RatingDimension3" : 1
}

一级结构根据key规则转换为多级结构 - Convert 'prefix soup', to nested data.

json input

{
  "rating-primary": 1,
  "rating-Price": 2,
  "rating-Design": 4,
  "rating-RatingDimension3": 1
}

json spec

[
  {
    "operation": "shift",
    "spec": {
      // rating-primary重命名为 Rating
      "rating-primary": "Rating",
      // 剩下的rating-
      //SecondaryRatings.是固定值
      //"rating-*": "Ratings2.&",
      //&是获取当前级key,也就是rating-Price,rating-Design,rating-RatingDimension3
      //这时我想去掉key中rating-,变成Price,Design,RatingDimension3
      "rating-*": "Ratings3.&(0,1)"
    }
  }
]

json output

{
  "Rating" : 1,
  "SecondaryRatings" : {
    "Price" : 2,
    "Design" : 4,
    "RatingDimension3" : 1
  }
}

获取LHS键值 - Grab LHS key values.

json input

{
  "rating": {
    "primary": {
      "value": 3,
      "max": 5
    },
    "quality": {
      "value": 3,
      "max": 7
    }
  }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值