Jolt 组合在一起并包含新标签

Jolt grouping together and including new tags

我有以下输入 JSON 并希望根据设备名称对子 json 进行分组。(必须从地址中提取设备名称)。另外,我想为新形成的数组添加新标签(每个数组包含仅具有该类型设备名称的 json)。

我已经尝试过以下规范,但数组名称显示为 deviceName 而不是自定义参数(我不知道如何提供自定义名称。例如,我希望数组名称为 "Parameters").我无法从地址字段中提取设备名称。(设备名称应为 "bee"/"honey")。另外,我想添加一个新字段,该字段应该为新数组(而不是每个元素)存在一次。

输入Json:

{
    "CID": "AND",
    "parameters": [{
            "address": "abc:api:honey",
            "name": "CH1"
        },
        {
            "address": "abc:api:honey",
            "name": "CH2"
        },
        {
            "address": "abc:api:bee",
            "name": "lat"
        },
        {
            "address": "abc:api:bee",
            "name": "long"
        }
    ],
    "rNo": 1232
}

预期输出:

[{
    "ID": "AND_1232",
    "parameters": [{
            "deviceName": "honey",
            "name": "CH1",
            "locoId": 1232,
            "CID": "AND"
        },
        {
            "deviceName": "honey",
            "name": "CH2",
            "locoId": 1232,
            "CID": "AND"
        }
    ],
    "SpData": {

    }
},
{
    "ID": "AND_1232",
    "parameters": [{
            "deviceName": "bee",
            "name": "lat",
            "locoId": 1232,
            "CID": "AND"
        },
        {
            "deviceName": "bee",
            "name": "long",
            "locoId": 1232,
            "CID": "AND"
        }
    ],
    "SpData": {

    }
}]

我试过的规格:

        [
          {
            "operation": "shift",
            "spec": {
              "parameters": {
                "*": {
                  "@(2,CID)": "&2.[&1].CID",
                  "*": "&2.[&1].&",
                  "@(2,rNo)": "&2.[&1].locoId"
                }
              }
            }
  },
          {
            "operation": "modify-overwrite-beta",
            "spec": {
              "ID": "=concat(@(0,CID),'_',@(0,rNo))",
              "parameters": {
                "*": {
                  "deviceName": "=substring(@(1,address),8,11)",
                  "SpData": {}
                }
              }
            }
  }, {
            "operation": "shift",
            "spec": {
              "parameters": {
                "*": {
                  "deviceName": {
                    "*": {
                      "@2": "&[]"
                    }
                  }
                }
              }
            }
  }

]

下面会输出想要的结果,每个操作分别做如下操作:

  1. 通过连接 CID 和 rNo 添加 ID
  2. 在所有参数中添加 rNo 和 CID,并添加 deviceName(有关设备名称拆分的详细信息,请参阅 here)。
  3. 使用对象按设备名称对记录进行分组
  4. 为每个组添加ID
  5. 将临时分组转换为数组
  6. 添加默认 SpData
[
  {
    "operation": "modify-default-beta",
    "spec": {
      "ID": "=concat(@(1,CID),'_',@(1,rNo))"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "ID": "&",
      "parameters": {
        "*": {
          "address": {
            "*:*:*": {
              "$(0,3)": "parameters.[&3].deviceName"
            }
          },
          "@(0,name)": "parameters.[&].name",
          "@(2,rNo)": "parameters.[&].locoId",
          "@(2,CID)": "parameters.[&].CID"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "ID": "&",
      "parameters": {
        "*": {
          "deviceName": {
            "*": {
              "@(3,[&2])": "tmp.&.parameters.[]"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "tmp": {
        "*": {
          "@(2,ID)": "&1.ID",
          "parameters": {
            "@": "&2.parameters"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  },
  {
    "operation": "default",
    "spec": {
      "*": {
        "SpData": {}
      }
    }
  }
]