【问题标题】:Split JSON into two individual JSON objects using Nifi使用 Nifi 将 JSON 拆分为两个单独的 JSON 对象
【发布时间】:2018-05-22 06:36:14
【问题描述】:

我有一个类似的 JSON

{
    "campaign_key": 316,
    "client_key": 127,
    "cpn_mid_counter": "24",
    "cpn_name": "Bopal",
    "cpn_status": "Active",
    "clt_name": "Bopal Ventures",
    "clt_status": "Active"
}

预期输出

第一个 JSON :

{
    "campaign_key": 316,
    "client_key": 127,
    "cpn_mid_counter": "24",
    "cpn_name": "Bopal",
    "cpn_status": "Active"
}

第二个 JSON:

{
    "clt_name": "Bopal Ventures",
    "clt_status": "Active"
}

如何使用 NIFI 来实现这一点?谢谢。

【问题讨论】:

  • 为什么需要 2 个 json?
  • 我需要将数据加载到 hbase 的 2 个列族中。
  • 所有数据的 Json 密钥都相同,对吗?
  • 是的,它们是一样的。

标签: json apache-nifi kylo


【解决方案1】:

您可以按照“用户”所说的去做。这种方法的不好之处在于,如果您的字段数量正在增加,那么您需要将许多 JSON 路径表达式属性添加到 EvaluateJsonPath,然后在 ReplaceText 中添加许多属性。

我的建议是使用QueryRecord,将记录读取器设置为 JsonTreeReader,记录写入器设置为 JsonRecordSetWriter。并添加两个动态关系属性如下:

json1 : SELECT campaign_key, client_key, cpn_mid_counter, cpn_name, cpn_status FROM FLOWFILE

json2 : SELECT clt_name, clt_status FROM FLOWFILE

这种方法负责以 JSON 格式读取和写入输出。另外,如果您想添加更多字段,只需在SQL SELECT 语句中添加字段名称即可。

QueryRecord 处理器允许您针对 FlowFile 内容执行 SQL 查询。关于这个处理器的更多细节可以找到here

附上截图

【讨论】:

  • 我是否需要在 convertAvroToJson 处理器中设置我的 AvroSchema 来注册架构,因为我收到架构未找到异常。
  • 您能帮我配置一下 Record Reader 和 Record Writer 吗?
  • 我创建了一个要点。你可以在这里找到:gist.github.com/zenfenan/08c8646062053d4efaab92a36bf64531
  • 这是涵盖我的答案的模板。将其下载为XML并作为模板上传到NiFi,您可以轻松查看配置
  • 更好的方法!!
【解决方案2】:

卡提克,

使用 EvaluateJsonPath 处理器通过其键获取所有 json 值。

示例:$.campaign_key 用于获取compaign 键值,$.clt_name 用于获取 clt 名称。

和上面一样,你可以得到所有的 jsons。

然后使用 ReplaceText Processor 将单个 json 转换为两个 json。

{"Compaign_Key":${CompaignKey},...etc}
{"Clt_name":${clt_name}}

它将单个json转换成两个json。

希望这对您有所帮助,如果您有问题,请告诉我。

【讨论】:

  • 这解决了我的问题。
猜你喜欢
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
相关资源
最近更新 更多