Jolt 将键和值转换为单独的数组集

问题描述 投票:0回答:1

我有一个嵌套的 JSON,如下所示。对象中的键和值需要分成 2 组数组,如预期输出所示。

输入:

{
  
  "ms": [
    {
      "ts": "2024-02-13T12:43:00.000Z",
      "ls": {
        "nr1:name1": {
          "UE": 0.1,
          "LE": 3,
          "TG": 5,
          "UW": null,
          "LW": null
        }
      },
      "ss": {
        "nr1:name1": [
          5.3
        ]
      }
    },
    {
      "ts": "2024-02-13T12:43:00.000Z",      
      "ls": {
        "nr2:name2": {
          "UE": 0.1,
          "LE": 0,
          "TG": 0,
          "UW": null,
          "LW": null
        }
      },
      "ss": {
        "nr2:name2": [
          0.03
        ]
      }
    }
  ]
}

当前输出为

{
  "ts" : [ "2024-02-13T12:43:00.000Z", "2024-02-13T12:43:00.000Z" ],
  "nrs" : [ "nr1", "nr2" ],
  "names" : [ "name1", "name2" ],
  "paramnames" : [ "UE", "LE", "TG", "UW", "LW", "UE", "LE", "TG", "UW", "LW" ],
  "values" : [ 0.1, 3, 5, null, null, 0.1, 0, 0, null, null ],
  "act" : [ 5.3, 0.03 ]
}

预期输出是

{
  "ts": [ "2024-02-13T12:43:00.000Z", "2024-02-13T12:43:00.000Z" ],
  "nrs" : [ "nr1", "nr2" ],
  "names" : [ "name1", "name2" ],
  "paramnames": {
    [
      "UE",
      "LE",
      "TG",
      "UW",
      "LW"
    ],
    [
      "UE",
      "LE",
      "TG",
      "UW",
      "LW"
    ]
  },
  "values": {
    [
      0.1,
      3,
      5,
      null,
      null
    ],
    [
      0.1,
      0,
      0,
      null,
      null
    ]
  },
    "act": [ 5.3, 0.03 ]
  }

我的 JOLT 规格看起来像这样

[
  {
    "operation": "shift",
    "spec": {
      "ms": {
        "*": {
          "ts": "ts",
          "ls": {
            "@0": {
              "*:*": {
                "$(0,1)": "nrs",
                "$(0,2)": "names",
                "*": {
                  "$": "paramnames",
                  "@": "values"
                }
              }
            }
          },
          "ss": {
            "*:*": {
              "*": "act"
            }
          }
        }
      }
    }
  }
]

需要根据 ms 数组中的每个元素将参数名称和值分类为子数组,但我无法做到这一点。有人可以帮忙吗?谢谢。

json apache-nifi jolt
1个回答
0
投票

您需要添加

[&4]
以便使用最外层数组的索引,该数组在树的级别内向上 4 层声明。另外,以
"@0"
开头的节点是多余的。因此,您可以使用以下转换:

[
  {
    "operation": "shift",
    "spec": {
      "ms": {
        "*": {
          "ts": "&",
          "ls": {
            // "@0": {
            "*:*": {
              "$(0,1)": "nrs",
              "$(0,2)": "names",
              "*": {
                "$": "paramnames[&4]",
                "@": "values[&4]"
              }
            }
            // }
          },
          "ss": {
            "*:*": {
              "*": "act"
            }
          }
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.