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

Jolt转换咨询:调整列顺序与获取当前时间戳问题

Jolt转换问题解决:调整列顺序与获取当前时间

需求说明

现有单层JSON数据,需完成以下转换:

  • 调整字段顺序并转为包含values对象的Rows数组
  • 在values数组末尾添加格式化后的当前日期时间
  • 添加固定默认标签operationType和Source

样本JSON

{
  "name": "john",
  "Address2": "123 Street 1",
  "Address1": "Apt 101",
  "custId": "ZY-1234",
  "zip": "67834"
}

预期JSON

{
  "Rows": [{
        "values": [
            "ZY-1234",
            "john",
            "123 Street 1",
            "Apt 101",
            "67834",
            "2022-09-01 10:10:09"
        ]
    }],
  "operationType": "Insert",
  "Source": "Dev"
}

现有Jolt规则

[
  {
    "operation": "default",
    "spec": {
      "ChangedBy": "NIFI",
      "ChangedOn": "${now()}"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "Rows[#1].Values"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "*": {
        "*": "&"
      },
      "operationType": "Insert",
      "Source": "Dev"
    }
  }
]

当前转换结果

{
  "Rows" : [ {
    "Values" : [ 
        "john", 
        "123 Street 1", 
        "Apt 101", 
        "ZY-1234", 
        "67834", 
        "NIFI", 
        "${now()}" ]
  } ],
  "operationType" : "Insert",
  "Source" : "Dev"
}

存在问题

  1. 如何调整Values数组中的列顺序?
  2. 如何正确获取并格式化当前日期时间?

解决方案

1. 调整列顺序

原规则使用*通配符会按JSON字段的自然顺序映射,要控制顺序需在shift操作中明确指定每个字段的目标位置,同时统一键名为小写values(匹配预期JSON结构):

  • 通过"字段名": "Rows[0].values[索引]"的格式,按需求顺序依次映射每个字段,索引从0开始递增,确保数组元素顺序完全符合预期。

2. 获取格式化的当前时间

Jolt本身不支持生成时间,若在Apache NiFi环境中使用JoltTransformJSON处理器,可利用NiFi表达式语言格式化当前时间:

  • 使用${now():format('yyyy-MM-dd HH:mm:ss')}生成指定格式的时间字符串
  • 通过modify-overwrite-beta操作将时间插入到values数组的末尾位置

修正后的Jolt规则

[
  // 按指定顺序映射字段到Rows数组的values中
  {
    "operation": "shift",
    "spec": {
      "custId": "Rows[0].values[0]",
      "name": "Rows[0].values[1]",
      "Address2": "Rows[0].values[2]",
      "Address1": "Rows[0].values[3]",
      "zip": "Rows[0].values[4]"
    }
  },
  // 添加顶层默认字段
  {
    "operation": "default",
    "spec": {
      "operationType": "Insert",
      "Source": "Dev"
    }
  },
  // 将格式化后的当前时间插入到values数组末尾
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Rows": {
        "[0]": {
          "values": {
            "[5]": "${now():format('yyyy-MM-dd HH:mm:ss')}"
          }
        }
      }
    }
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:00:55