给定多个对象时如何向 jolt 提供输入 [英] How to provide input to jolt when multiple objects are given

查看:38
本文介绍了给定多个对象时如何向 jolt 提供输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将转换应用于具有以下格式(不是数组,只是多个对象)的记录的 json 文件.我想提供一个具有以下输入格式并在应用转换后的文件.想要将它保存在某个文件夹中.例子:

输入记录格式

<代码> {"name": "亚当",年龄":12,城市":澳大利亚"}{"name": "亚当",年龄":12,城市":澳大利亚"}{"name": "亚当",年龄":12,城市":澳大利亚"}{"name": "亚当",年龄":12,城市":澳大利亚"}{"name": "亚当",年龄":12,城市":澳大利亚"}{"name": "亚当",年龄":12,城市":澳大利亚"}.....

所需的输出记录格式

<代码> {"fname": "亚当",年龄":12,城市":澳大利亚"}{"fname": "亚当",年龄":12,城市":澳大利亚"}{"fname": "亚当",年龄":12,城市":澳大利亚"}{"fname": "亚当",年龄":12,城市":澳大利亚"}{"fname": "亚当",年龄":12,城市":澳大利亚"}{"fname": "亚当",年龄":12,城市":澳大利亚"}//只是将名称键更改为 fname.....

解决方案

既然您标记了 apache-nifi,我假设您想为此使用 Apache NiFi 中的 JOLT 处理器之一.在这种情况下,JoltTransformJSON 将不起作用,因为它需要有效的 JSON,正如 daggett 所说.但是 JsonTreeReader 中的 JSON 解析器更宽松,因此您可以将 JoltTransformRecord 与 JsonTreeReader 和以下规范一起使用:

<预><代码>[{"操作": "移位",规格":{"name": "fname","*": "&"}}]

虽然您不能在没有有效 JSON 的情况下漂亮地打印"JSON,但您可以将 JsonRecordSetWriter 上的输出分组属性设置为 One Line Per Object.这会给你输入类似的东西:

{"fname":"adam","age":12,"city":"australia"}{"fname":"adam","age":12,"city":"澳大利亚"}{"fname":"adam","age":12,"city":"澳大利亚"}{"fname":"adam","age":12,"city":"澳大利亚"}{"fname":"adam","age":12,"city":"澳大利亚"}{"fname":"adam","age":12,"city":"澳大利亚"}

How to apply transformation to the json file having records in the following format (not array, just multiple objects). I want to provide a file with following input format and after applying transfornation.Want to get it saved in some folder. example:

Input Record Format

    {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "name": "adam",
     "age": 12,
     "city": "australia"
   }
   .....

Desired Output Record Format

   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   {
     "fname": "adam",
     "age": 12,
     "city": "australia"
   }
   // Just changing the name key to fname
   .....

解决方案

Since you tagged apache-nifi I assume you want to use one of the JOLT processors in Apache NiFi for this. In this case JoltTransformJSON won't work because it expects valid JSON as daggett said. However the JSON parser in JsonTreeReader is more lenient, so you can use JoltTransformRecord with a JsonTreeReader and the following spec:

[
  {
    "operation": "shift",
    "spec": {
      "name": "fname",
      "*": "&"
    }
  }
]

Although you can't "pretty print" the JSON without it being valid JSON, you can set the Output Grouping property on the JsonRecordSetWriter to One Line Per Object. That will give you input something like:

{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}
{"fname":"adam","age":12,"city":"australia"}

这篇关于给定多个对象时如何向 jolt 提供输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆