Толчок json преобразовать вопрос. Есть запись с массивом внутри и необходимо преобразовать в массив записей - PullRequest
2 голосов
/ 18 февраля 2020

Мне нужно преобразовать некоторые потоковые файлы в NIFI и я хотел бы использовать преобразования Джолта. Я играл с этим некоторое время и не могу понять, какое преобразование будет работать. У меня есть ...

{
  "asset": "transformer1",
  "readings": {
    "oil_temp": 0.7499248991503604,
    "otc_top_temp": 0.2870503485615279
  },
  "timestamp": "02/17/2020 19:07:31",
  "key": "e2af07ab-4d21-4a70-ba3f-9113bb335d1e"
}

и мне нужно преобразовать это в массив записей, подобных этой ...

[
  {
    "tag": "transformer1.oil_temp",
    "timestamp": "02/17/2020 19:07:31",
    "value": 0.7499248991503604
  },
  {
    "tag": "transformer1.otc_top_temp",
    "timestamp": "02/17/2020 19:07:31",
    "value": 0.2870503485615279
  }
]

Я надеюсь, что это возможно. Я был бы очень признателен за любую помощь. Спасибо.

1 Ответ

2 голосов
/ 18 февраля 2020

Этого можно достичь с помощью нескольких шагов преобразования:

  1. Отображение показаний в список
  2. Создание нового поля тега с помощью операции concat
  3. Пропускать только те значения, которые вы хочу в результате

JoltSpe c:

[
  {
    "operation": "shift",
    "spec": {
      "readings": {
        "*": {
          "@(2,asset)": "[#2].asset",
          "$": "[#2].name",
          "@": "[#2].value",
          "@(2,timestamp)": "[#2].timestamp"
        }
      }
    }
  }, {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "tag": "=concat(@(1,asset),'.',@(1,name))"
      }
    }
  }, {
    "operation": "shift",
    "spec": {
      "*": {
        "tag": "[&1].tag",
        "timestamp": "[&1].timestamp",
        "value": "[&1].value"
      }
    }
  }
]

Вход:

{
  "asset": "transformer1",
  "readings": {
    "oil_temp": 0.7499248991503604,
    "otc_top_temp": 0.2870503485615279
  },
  "timestamp": "02/17/2020 19:07:31",
  "key": "e2af07ab-4d21-4a70-ba3f-9113bb335d1e"
}

Выход:

[ {
  "tag" : "transformer1.oil_temp",
  "timestamp" : "02/17/2020 19:07:31",
  "value" : 0.7499248991503604
}, {
  "tag" : "transformer1.otc_top_temp",
  "timestamp" : "02/17/2020 19:07:31",
  "value" : 0.2870503485615279
} ]

Тест это здесь: https://jolt-demo.appspot.com/#inception

...