jolt json to json mapping第一篇

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
    }
  }
}

你可能感兴趣的:(json,java)