首页 文章

Nifi操纵Invokehttp中的所有Json Key值

提问于
浏览
0

我有一个来自InvokeHTTP的json . 我做了一个Split Json和JoltTransform来获取Key,Values,但我需要将所有Key从Camelcase更改为snakecase .

每个InvokeHttp调用我的密钥都不同 . 我已经尝试过AttributestoJson和EvaluateJsonPath以及一些替换文本,但还没有找到一种方法来动态更改键,然后合并回值而无需编写自定义处理器 .

来自InvokeHTTP的原始数据:

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

在Split 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 回答

  • 1

    如果您知道这些字段,则可以在原始输入JSON上使用JoltTransformJSON,这样您就不必使用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的单独模式 .

  • 1

    我写了an answer to a similar question,使用 ReplaceText_ 替换JSON键中的 . . 这里可以应用相同的逻辑(模板在链接中可用) . 正如我在该答案中指出的那样,更清晰的解决方案是使用 ExecuteScript ,尤其是在大多数脚本语言中,从camelcase到snakecase的转换很容易 .

相关问题