【问题标题】:Unable to form the JOLT schema to transform JSON in NiFi无法形成 JOLT 模式以在 NiFi 中转换 JSON
【发布时间】:2019-04-09 13:06:41
【问题描述】:

我正在尝试在 Apache NiFi 中使用 jolt JSON 到 JSON 的转换。我想将一个 JSON 转换成另一种格式。

这是我的原始 JSON:

{
  "total_rows": 5884,
  "offset": 0,
  "rows": [
    {
      "id": "03888c0ab40c32451a018be6b409eba3",
      "key": "03888c0ab40c32451a018be6b409eba3",
      "value": {
        "rev": "1-d5cc089dd8682422962ccab4f24bd21b"
      },
      "doc": {
        "_id": "03888c0ab40c32451a018be6b409eba3",
        "_rev": "1-d5cc089dd8682422962ccab4f24bd21b",
        "topic": "iot-2/type/home-iot/id/1234/evt/temp/fmt/json",
        "payload": {
          "temperature": 36
        },
        "deviceId": "1234",
        "deviceType": "home-iot",
        "eventType": "temp",
        "format": "json"
      }
    },
    {
      "id": "03888c0ab40c32451a018be6b409f163",
      "key": "03888c0ab40c32451a018be6b409f163",
      "value": {
        "rev": "1-dee82cbb1b5ffa8a5e974135eb6340c5"
      },
      "doc": {
        "_id": "03888c0ab40c32451a018be6b409f163",
        "_rev": "1-dee82cbb1b5ffa8a5e974135eb6340c5",
        "topic": "iot-2/type/home-iot/id/1234/evt/temp/fmt/json",
        "payload": {
          "temperature": 22
        },
        "deviceId": "1234",
        "deviceType": "home-iot",
        "eventType": "temp",
        "format": "json"
      }
    }
  ]
}

我希望将其转换为以下 JSON:

[
   {
      "temperature":36,
      "deviceId":"1234",
      "deviceType":"home-iot",
      "eventType":"temp"
   },
   {
      "temperature":22,
      "deviceId":"1234",
      "deviceType":"home-iot",
      "eventType":"temp"
   }
]

这是我的规范的样子:

[
  {
    "operation": "shift",
    "spec": {
      "rows": {
        "*": {
          "doc": {
            "deviceId": "[&1].deviceId",
            "deviceType": "[&1].deviceType",
            "eventType": "[&1].eventType",
            "payload": {
              "*": "[&1]"
            }
          }
        }
      }
    }
  }
]

我不断收到空响应。我是新手,文档不是很容易理解。有人可以帮忙吗?

【问题讨论】:

    标签: json transform apache-nifi jolt


    【解决方案1】:

    因为您在数组索引之后又“下降”了一级,所以当您到达 deviceId 时,您距离索引还有 2 级。将所有&1s 替换为&2payload 除外。在这种情况下,您处于另一个“下降”级别,因此您需要使用&3 作为索引。您还需要获取与*(例如temperature)匹配的任何内容,并通过在数组索引后使用& 将传出字段名称设置为相同的名称。这是生成的规范:

    [
      {
        "operation": "shift",
        "spec": {
          "rows": {
            "*": {
              "doc": {
                "deviceId": "[&2].deviceId",
                "deviceType": "[&2].deviceType",
                "eventType": "[&2].eventType",
                "payload": {
                  "*": "[&3].&"
                }
              }
            }
          }
        }
      }
    ]
    

    【讨论】:

    • 好的,我不太明白,但这工作得很好!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多