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

如何编写适配单/多objectname的嵌套JSON Jolt Spec?

Jolt转换规则编写需求

需要编写Jolt Spec,将指定嵌套JSON转换为目标输出格式,核心要求是兼容objectname字段的两种情况:既可以包含多个键值对对象,也可以是单个对象。

输入JSON

{
  "Status": "Green",
  "objectname": {
    "LED TV": {
      "values": [
        [
          "one",
          "two",
          "three",
          "four"
        ],
        [
          0,
          0,
          0,
          "one"
        ],
        [
          0,
          "one",
          0,
          "two"
        ]
      ],
      "time": [
        1663331241000,
        1663330155000,
        1663328545000
      ]
    },
    "LED Bulb": {
      "values": [
        [
          "one",
          "two",
          "three",
          "four"
        ],
        [
          0,
          0,
          0,
          "one"
        ],
        [
          0,
          "one",
          0,
          "two"
        ]
      ],
      "time": [
        1663331241000,
        1663330155000,
        1663328545000
      ]
    },
    "LED LAMP": {
      "values": [
        [
          "one",
          "two",
          "three",
          "four"
        ],
        [
          0,
          0,
          0,
          "one"
        ],
        [
          0,
          "one",
          0,
          "two"
        ]
      ],
      "time": [
        1663331541000,
        1663330555000,
        1663328545000
      ]
    }
  },
  "Source": "LED EQUIPS"
}

预期输出JSON

[
  [
    "Status",
    "Green",
    "objectname",
    "LED TV",
    "values",
    [
      "one",
      "two",
      "three",
      "four"
    ],
    [
      0,
      0,
      0,
      "one"
    ],
    [
      0,
      "one",
      0,
      "two"
    ]
  ],
  [
    "Status",
    "Green",
    "objectname",
    "LED Bulb",
    "values",
    [
      "one",
      "two",
      "three",
      "four"
    ],
    [
      0,
      0,
      0,
      "one"
    ],
    [
      0,
      "one",
      0,
      "two"
    ]
  ],
  [
    "Status",
    "Green",
    "objectname",
    "LED LAMP",
    "values",
    [
      "one",
      "two",
      "three",
      "four"
    ],
    [
      0,
      0,
      0,
      "one"
    ],
    [
      0,
      "one",
      0,
      "two"
    ]
  ],
  "Source",
  "LED EQUIPS"
]

解决方案:Jolt Spec

[
  {
    "operation": "shift",
    "spec": {
      "objectname": {
        "*": {
          "@2,Status": "[#2].0",
          "@2,Status": "[#2].1",
          "'objectname'": "[#2].2",
          "$": "[#2].3",
          "'values'": "[#2].4",
          "values": {
            "*": "[#4].5&"
          }
        }
      },
      "Source": {
        "$": "[3]",
        "@": "[4]"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "0": "=ifElse(IsArray(@0),@0,[@0])"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "0": "",
      "3": "",
      "4": ""
    }
  }
]

规则说明

  1. 第一步Shift操作:
    • 遍历objectname下的所有子对象,将Status、对象名称、values数组拆解到对应位置的数组中。
    • 单独处理Source字段,放到输出数组的最后两位。
  2. Modify操作:
    • 当objectname是单个对象时,第一步生成的结果会是单个元素而非数组,通过ifElse和IsArray判断,将其包装为数组,保证格式统一。
  3. 第三步Shift操作:
    • 把处理后的数组展开,合并成最终的输出结构。

内容的提问来源于stack exchange,提问作者self lab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:10:35