我有一个工作的震动,除了我的日期部分是错误的.我需要的日期是在输出中的适当格式.需要帮助来编辑我现有的Jolt

输入JSON:

{
  "Timestamp_UTC": "28-Aug-2023 12:01:00",
  "Control area - Redox 1_Red Sensor": 439.1354,
  "Measure area - Redox 2_Blue Sensor": 455.73474,
  "Voltage": 13.48,
  "Measure area - PH_1_S/N: 2213805": -0.096,
  "Control area - PH_2_S/N: 2213826_CONTROL": 6.171
}

输出JSON:

{
  "Date": "28-08-2023 12:01:00",
  "data": [
    {
      "code": "REDOX1",
      "value": 439.1354
    },
    {
      "code": "REDOX2",
      "value": 455.73474
    },
    {
      "code": "PH1",
      "value": -0.096
    },
    {
      "code": "A1-PH2",
      "value": 6.171
    }
  ],
  "stationname": "ftp_device_01"
}

当前震荡:

[
  {
    "operation": "shift",
    "spec": {
      "Timestamp_UTC": "Date",
      "Control area - Redox 1_Red Sensor": "data.REDOX1",
      "Measure area - Redox 2_Blue Sensor": "data.REDOX2",
      "Measure area - PH_1_S/N: 2213805": "data.PH1",
      "Control area - PH_2_S/N: 2213826_CONTROL": "data.A1-PH2"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "Date": "&",
      "data": {
        "*": {
          "$": "&2[#2].code",
          "@": "&2[#2].value"
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "data": {
        "*": {
          "value": [
            "=notNull",
            0
          ]
        }
      },
      "DtLen": "=size(@(1,Date))",
      "DtDatePart": "=substring(@(1,Date),0,10)",
      "DtDatePartSplit": "=split('/',@(1,DtDatePart))",
      "DtTimePart": "=substring(@(1,Date),10,@(1,DtLen))",
      "DtTimePartTrim": "=trim(@(1,DtTimePart))",
      "Date": "=concat(@(1,DtDatePartSplit[2]),'-',@(1,DtDatePartSplit[1]),'-',@(1,DtDatePartSplit[0]),' ',@(1,DtTimePartTrim))"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "Dt*": ""
    }
  },
  {
    "operation": "default",
    "spec": {
      "stationname": "ftp_device_01"
    }
  }
]

推荐答案

因为您一直在使用NIFI,所以可以使用表达式语言和一些更多的处理器,而不是在Jolt规范内操作100‘S的值.

您可以添加

  • GetFile处理器:假设输入的JSON值在文件中

  • SplitJSON处理器:通过使用以下命令分别获取每个JSON值作为属性

    100等于101

  • EvaluateJSONPath处理器:通过添加属性来创建名为Timestamp_UTC的属性

    名称为100,值为101

    100属性值为101

  • UpdateAttribute处理器:通过添加新的

    带值的100号属性

    100

  • JoltTransformJSON处理器,具有以下规格:

    [
      {
        "operation": "shift",
        "spec": {
          "Timestamp_UTC": "Date",
          "*": "data.&" // all elements other than "Timestamp_UTC" 
        }
      },
      {
        "operation": "shift",
        "spec": {
          "Date": "&",
          "data": {
            "*": {
              "$": "&2[#2].code",
              "@": "&2[#2].value"
            }
          },
          "#ftp_device_01": "stationname" // to add a fixed valued attribute
        }
      },
      {
        "operation": "modify-overwrite-beta",
        "spec": {
          "Date": "${Timestamp_UTC}",
          "data": {
            "*": {
              "value": [
                "=notNull",
                0
              ]
            }
          }
        }
      }
    ]
    

下图显示了完整的NiFi流:

enter image description here

然而,作为替代方案,您可以在JoltTransformJSON处理器中完成所有操作,但需要硬编码所有月份数字和它们的缩写文字以及以下转换规范:

[
  {
    "operation": "shift",
    "spec": {
      "Timestamp_UTC": "Date",
      "*": "data.&" // all elements other than "Timestamp_UTC" 
    }
  },
  {
    "operation": "shift",
    "spec": {
      "Date": "&",
      "data": {
        "*": {
          "$": "&2[#2].code",
          "@": "&2[#2].value"
        }
      },
      "#ftp_device_01": "stationname" // to add a fixed valued attribute
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Date": "=split('-',@(1,&))",
      "data": {
        "*": {
          "value": [
            "=notNull",
            0
          ]
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "Date": {
        "1": {
          "Jan": { "#01": "&3" },
          "Feb": { "#02": "&3" },
          "Mar": { "#03": "&3" },
          "Apr": { "#04": "&3" },
          "May": { "#05": "&3" },
          "Jun": { "#06": "&3" },
          "Jul": { "#07": "&3" },
          "Aug": { "#08": "&3" },
          "Sep": { "#09": "&3" },
          "Oct": { "#10": "&3" },
          "Nov": { "#11": "&3" },
          "Dec": { "#12": "&3" }
        },
        "*": "&1"
      },
      "*": "&"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Date": "=join('-',@(1,&))"
    }
  }
]

Json相关问答推荐

当有嵌套数组而没有嵌套数组时,展平JSON

使用更高级别架构中的字段值在$def内实现约束

当console.log返回TRUE值时,解析的JSON中的字段未定义

NIFI-我需要数组的信息,但只需要第一个信息

jq 对特定键进行过滤并将值整理到单个 csv 单元格中

XSLT 3.0 Json-to-xml,json 包含 html struct

展平多个数组以保持顺序

使用 jolt 将对象数组转换为数组

将环境变量值从 yaml 传递到 json

N1QL 聚合查询 Couchbase

使用 Javascript 判断 JSON 对象是否包含值

可以通过 POST 使用 EventSource 传递参数的服务器发送事件 (SSE)

使用 @ResponseBody 自定义 HttpMessageConverter 来做 Json 事情

Rails 中奇怪的 JSON Javascript 问题

对象序列化为 JSON(使用 Gson).如何在 UpperCamelCase 中设置字段名称?

将字符串映射到json对象的多种类型?

字符串格式 JSON 字符串给出 KeyError

如何在 Java 中将 YAML 转换为 JSON?

java.lang.BootstrapMethodError:调用站点#4 bootstrap 方法的异常,初始化 retrofit 时

YAML 将 5e-6 加载为字符串而不是数字