You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jolt转换问题:将嵌套JSON中每个ms元素的参数名与值分组为子数组

Jolt转换问题:将嵌套JSON中每个ms元素的参数名与值分组为子数组

我手头有个嵌套结构的JSON,想要把ms数组里每个元素对应的参数名和值分别拆分成子数组组成的数组,但目前用的Jolt转换后,paramnames和values是平铺的一维数组,没法按每个ms元素分组。下面是具体的输入、输出情况和当前的Jolt Spec,麻烦帮忙调整下实现期望的效果?

输入JSON

{
  "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 ]
}

期望输出(修正JSON语法后)

{
  "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 ]
}

注:原期望输出里用大括号包裹子数组的写法不符合JSON规范,上面是修正后的合法格式,确保结构为「数组包含子数组」。

当前使用的Jolt Spec

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

修正后的Jolt Spec

[
  {
    "operation": "shift",
    "spec": {
      "ms": {
        "*": {
          // 保留ts的数组收集逻辑
          "ts": "ts",
          "ls": {
            "*:*": {
              // 收集nrs和names,按ms元素索引对应
              "$(0,1)": "nrs",
              "$(0,2)": "names",
              // 关键:用&2引用外层ms的数组索引,把当前元素的参数名分组到对应子数组
              "*": {
                "$": "paramnames[&2]",
                "@": "values[&2]"
              }
            }
          },
          "ss": {
            "*:*": {
              "*": "act"
            }
          }
        }
      }
    }
  }
]

逻辑解释

  1. 核心改动是在paramnames和values的路径里加入了[&2]:
    • &2代表向上回溯2层的索引值,也就是ms数组当前元素的索引(0、1...)
    • 这样每个ms元素里的参数名和值都会被收集到对应索引的子数组中,而不是平铺成一维数组
  2. 去掉了原Spec里多余的@0层级,直接遍历ls下的*:*键,简化结构
  3. 其他字段(ts、nrs、names、act)的收集逻辑保持不变,确保原有功能正常

备注:内容来源于stack exchange,提问作者VKB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:18:11