You need to enable JavaScript to run this app. 借助JOLT完成嵌套时序JSON扁平化转换的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

借助JOLT完成嵌套时序JSON扁平化转换的问题求助

JOLT实现多层嵌套时序JSON打平的实现方案

核心问题说明

  • 待处理输入为三层嵌套结构:最外层键为ISO格式时间戳,中间层键为设备ID(如249184、249185),最内层存储SRAD、T两类监测指标的数值
  • 目标输出为打平后的独立时序记录列表,每条记录包含timestamp、deviceID、SRAD、T四个字段,实现外层时间戳与下属所有设备节点的全匹配展开
  • 常规固定键的转换规则无法适配动态嵌套的键名结构,容易出现值错位、记录合并错误的问题

输入输出结构示例

输入样例

{
  "2024-05-20T12:00:00Z": {
    "249184": {
      "SRAD": 320,
      "T": 24.5
    },
    "249185": {
      "SRAD": 298,
      "T": 23.8
    }
  },
  "2024-05-20T12:05:00Z": {
    "249184": {
      "SRAD": 325,
      "T": 24.7
    }
  }
}

期望输出样例

[
  {
    "timestamp": "2024-05-20T12:00:00Z",
    "deviceID": "249184",
    "SRAD": 320,
    "T": 24.5
  },
  {
    "timestamp": "2024-05-20T12:00:00Z",
    "deviceID": "249185",
    "SRAD": 298,
    "T": 23.8
  },
  {
    "timestamp": "2024-05-20T12:05:00Z",
    "deviceID": "249184",
    "SRAD": 325,
    "T": 24.7
  }
]

可直接复用的JOLT转换规则

[
  {
    "operation": "shift",
    "spec": {
      // 匹配最外层所有ISO时间戳节点
      "*": {
        // 匹配时间戳下所有设备ID节点
        "*": {
          // 透传设备节点下的固定指标值
          "SRAD": "[&1].SRAD",
          "T": "[&1].T",
          // 捕获当前层级的设备ID键名,写入对应记录的deviceID字段
          "$": "[&2].deviceID",
          // 向上回溯1层获取时间戳节点的键名,写入对应记录的timestamp字段
          "@(1,$)": "[&2].timestamp"
        }
      }
    }
  }
]

规则适配逻辑

  • 全程使用通配符匹配动态键名,无需为单时间戳、单设备的固定场景硬编码规则,可兼容任意数量的时间戳、任意数量的设备ID嵌套场景
  • 通过JOLT内置的层级引用语法实现键名捕获,避免值与字段错位问题:
    • & 用于回溯通配符的匹配层级,为每个独立设备节点分配数组中的独立索引位,防止多设备记录合并
    • $ 用于获取当前匹配节点的键名,而非节点存储的数值
    • @(层级,$) 用于向上回溯指定层级的节点键名,实现外层时间戳向内层设备记录的字段传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 07:27:00