JOLT 将数组转换为字符串,数组中的元素数量是无限的

JOLT converting an array to a string with an indifinite numbers of elements in the array

请帮忙。我查看了所有类似的问题,但没有找到我的答案。我知道如何转换这个

{
  "rooms": {
    "room_number": [
      {
        "number": "1"
      },
      {
        "number": "2"
      },
      {
        "number": "3"
      },
      {
        "number": "4"
      },
      {
        "number": "5"
      }
    ]
  }
}

进入这个

{
  "room_numbers" : "1;2;3;4;5"
}

有了这个 JOLT

[
  {
    "operation": "shift",
    "spec": {
      "rooms": {
        "room_number": {
          "*": {
            "@(number)": "room_numbers[]"
          }
        }
      }
    }
    },
  {
    "operation": "modify-overwrite-beta",
    "spec": { "room_numbers": "=concat(@(2,room_numbers[0]),';',@(2,room_numbers[1]),';',@(2,room_numbers[2]),';',@(2,room_numbers[3]),';',@(2,room_numbers[4]))" }
  }
]

但我不知道如果数组中的元素数量是一个变量,这是怎么回事。

您可以使用 join 而不是 concat 以及 modify 转换以执行一次连接而不是单独添加每个数组元素,例如

[
  {
   // dynamically get the array of numbers, namely "room_numbers" 
    "operation": "shift",
    "spec": {
      "rooms": {
        "room_number": {
          "*": {
            "*": "&2s"
          }
        }
      }
    }
  },
  {
    // concatenate all of them
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=join(';',@(1,&))"
    }
  }
]