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