Jolt- 基于索引需要迭代一个列表并从索引中形成公共对象

Jolt- Based on the index need to iterate a list and form common object from the index

我需要迭代一个列表,该列表可以具有相同的标签名称但具有不同的索引,例如 0、1、2。所以我需要迭代列表,取出公共索引并从该索引中取出名称和值标签并形成另一个列表。

要求:

{
  "characteristic": [
    {
      "name": "BucketName",
      "value": "testName0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    },
    {
      "name": "BucketName",
      "value": "testName1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    },
    {
      "name": "BucketName",
      "value": "testName2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    },
    {
      "name": "BucketId",
      "value": "testId0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    },
    {
      "name": "BucketId",
      "value": "testId1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    },
    {
      "name": "BucketId",
      "value": "testId2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    }
  ]
}

需要回复:

{
  "bucketList": [
    {
      "BucketName": "testName0",
      "BucketId": "testId0"
    },
    {
      "BucketName": "testName1",
      "BucketId": "testId1"
    },
    {
      "BucketName": "testName2",
      "BucketId": "testId2"
    }
  ]
}

我们如何根据 alist 的索引实现这一点?

当有更多元素时如何处理这种情况,如果值没有出现则跳过,只添加出现的标签。 请求示例:

{
  "characteristic": [
    {
      "name": "BucketName",
      "value": "testName0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    },
    {
      "name": "BucketId",
      "value": "testId0",
      "@type": "bucketInfo",
      "arrayIndex": "0"
    },
    {
      "name": "BucketType",
      "value": "testType1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    },
    {
      "name": "BucketId",
      "value": "testId1",
      "@type": "bucketInfo",
      "arrayIndex": "1"
    },
    {
      "name": "BucketName",
      "value": "testName2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    },
    {
      "name": "BucketId",
      "value": "testId2",
      "@type": "bucketInfo",
      "arrayIndex": "2"
    },
    {
      "name": "BucketId",
      "value": "testId3",
      "@type": "bucketInfo",
      "arrayIndex": "3"
    },
    {
      "name": "BucketName",
      "value": "testName3",
      "@type": "bucketInfo",
      "arrayIndex": "3"
    },
    {
      "name": "BucketData",
      "value": "testData3",
      "@type": "bucketInfo",
      "arrayIndex": "3"
    }
  ]
}

预期响应:

{
    "bucketlist": [
        {
            "BucketName": "testName0",
            "BucketId": "testId0"
        },
        {
            "BucketType": "testType1",
            "BucketId": "testId1"
        },
        {
            "BucketName": "testName2",
            "BucketId": "testId2"
        },
        {
            "BucketName": "testName3",
            "BucketId": "testId3",
            "BucketData": "testData3"
        }
    ]
}

您可以应用两个连续的 shift 转换。以"@(2,arrayIndex)"作为公因数,以便在第一次转换中合并公共标记数组下的元素,然后在第二次转换中根据需要显示它们这样作为

[
  {
    "operation": "shift",
    "spec": {
      "characteristic": {
        "*": {
          "value": {
            "@(1,value)": "@(2,arrayIndex).@(2,name)"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "bucketList[]"
    }
  }
]