用 Jolt 变形时反击

问题描述

我正在将两个对象数组转换为一个对象数组。这样做时,根据 item 的类型,我需要为每个 item 分配一个 id。并且,将项目放入单个数组后,id 应该是串行的,按照它们最初出现在输入 json 中的顺序。它不是所有项目的单个 itemId。它基于它自己的类型。 PFB 输入和输出 JSON 样本。使用 jolt-core [0.1.0] 。请帮忙。

输入JSON:

{
    "Beverages" : {
        "Items" : [ {
            "name" : "cofee","type" : "hot"
        },{
            "name" : "wine","type" : "cold"
        },{
            "name" : "tea",{
            "name" : "beer","type" : "cold"
        }
        ]   
    },"Snacks" : {
        "Items" : [ {
            "name" : "crackers",{
            "name" : "salad",{
            "name" : "muffin",{
            "name" : "toast","type" : "hot"
        }
        ]
    }
}

而且,预​​期的输出是:

{
    "items" : [{
            "name" : "cofee","type" : "hot","hotId" : 1
        },"type" : "cold","coldId" : 1
        },"hotId" : 2
        },"coldId" : 2
        },{
            "name" : "crackers","hotId" : 3
        },"coldId" : 3
        },"coldId" : 4
        },"hotId" : 4
        }
    
    ]
}

如上,hotId 和coldId 是输出中的新字段。但是,它会增加

解决方法

这个(冗长的)规范应该产生输出

[
  {
    "operation": "shift","spec": {
      "*": {
        "Items": {
          "*": {
            "name": "@(1,type)"
          }
        }
      }
    }
  },{
    "operation": "shift","spec": {
      "*": {
        "*": "&1[&0].name"
      }
    }
  },"spec": {
      "*": {
        "*": {
          "*": "&2[&1].&","$1": "&2[&1].type"
        }
      }
    }
  },{
    "operation": "modify-default-beta","spec": {
      "*": {
        "*": {
          "idName": "=concat(@(1,type),'Id')"
        }
      }
    }
  },"spec": {
      "*": {
        "@": "&","*": {
          "idName": {
            "$1": "&3[&2].idValue"
          }
        }
      }
    }
  },{
    "operation": "modify-overwrite-beta","spec": {
      "*": {
        "*": {
          "idValue": "=intSum(@(1,idValue),1)"
        }
      }
    }
  },"spec": {
      "*": {
        "*": {
          "idValue": "&2[&1].@(1,idName)"
        },"@": "&"
      }
    }
  },"spec": {
      "*": {
        "*": {
          "name|type|coldId|hotId": "&2[&1].&"
        }
      }
    }
  },"spec": {
      "*": {
        "*": "items[]"
      }
    }
  }
]

尝试一个接一个地检查转换的输出。 注意:元素的顺序与所需的输出不同。如果我找到更多时间,我会尝试对其进行排序并(也许)使其更简洁。