Nifi манипулирует всеми значениями ключей Json из Invokehttp - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть JSON, который приходит из InvokeHTTP.Я сделал Split Json и JoltTransform, чтобы получить Key, Values, но мне нужно поменять все ключи с Camelcase на snakecase.

Мои ключи будут отличаться при каждом вызове InvokeHttp.Я попробовал AttributestoJson и EvaluateJsonPath и некоторые заменил текст, но не нашел способа динамически изменить только ключи и затем объединить их со значениями без записи собственного процессора.

Исходные данные из InvokeHTTP:

{
  "data": {
    "Table": [
      {
        "Age": 51,
        "FirstName": "Bob",
        "LastName": "Doe"
      },
      {
        "Age": 26,
        "FirstName": "Ryan",
        "LastName": "Doe"
      }
    ]
  }
}

Ввод после разделения Json (дает мне каждый json в отдельном поточном файле) и Jolt:

[
  {
    "Key": "Age",
    "Value": 51
  },
  {
    "Key": "FirstName",
    "Value": "Bob"
  },
  {
    "Key": "LastName",
    "Value": "Doe"
  }
]

Желаемый вывод:

{
  "data": {
    "Table": [
      {
        "age": 51,
        "first_name": "Bob",
        "last_name": "Doe"
      },
      {
        "age": 26,
        "first_name": "Ryan",
        "last_name": "Doe"
      }
    ]
  }
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Если вы знаете поля, вы можете использовать JoltTransformJSON для исходного входного JSON, поэтому вам не нужно использовать SplitJson, вот спецификация, которая будет выполнять (явное) преобразование имени поля:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "Table": {
          "*": {
            "Age": "data.Table[#2].age",
            "FirstName": "data.Table[#2].first_name",
            "LastName": "data.Table[#2].last_name"
          }
        }
      }
    }
  }
]

Вы также можете использовать UpdateRecord, вам просто нужны отдельные схемы для JsonTreeReader и JsonRecordSetWriter.

0 голосов
/ 19 сентября 2018

Я написал ответ на аналогичный вопрос , который использует ReplaceText для замены . в ключах JSON на _.Та же логика может быть применена и здесь (шаблон доступен по ссылке).Как я указывал в этом ответе, более чистым решением было бы использование ExecuteScript, тем более что преобразование из camelcase в snakecase выполняется легко в большинстве языков сценариев.

...