首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NiFi通过JsonPathReader或JsonTreeReader将JSON转换为CSV

NiFi通过JsonPathReader或JsonTreeReader将JSON转换为CSV
EN

Stack Overflow用户
提问于 2020-08-19 14:30:56
回答 1查看 367关注 0票数 0

我正在尝试将JSON文件转换为CSV,但我似乎没有这样做的运气。我的JSON看起来是这样的:{{

代码语言:javascript
复制
{"meta": {
    "contentType": "Response"
},
"content": {
    "data": {
        "_type": "ObjectList",
        "erpDataObjects": [
            {
                "meta": {
                    "lastModified": "2020-08-10T08:37:21.000+0000",
                },
                "head": {
                    "fields": {
                        "number": {
                            "value": "1",
                        },
                        "id": {
                            "value": "10000"
                        },
                    }
                }
            {
                "meta": {
                    "lastModified": "2020-08-10T08:37:21.000+0000",
                },
                "head": {
                    "fields": {
                        "number": {
                            "value": "2",
                        },
                        "id": {
                            "value": "10001"
                        },
                    }
                }
            {
                "meta": {
                    "lastModified": "2020-08-10T08:37:21.000+0000",
                },
                "head": {
                .. much more data

我基本上希望我的csv看起来像这样:

代码语言:javascript
复制
number,id
1,10000
2,10001

我的流程是这样的:

GetFile ->设置输出文件名-> ConvertRecord -> UpdateAttribute -> PutFile

ConvertRecord使用JsonTreeReader和CSVRecordSetWriter JsonTreeReader CsvRecordSetWriter。他们都调用了一个AvroSchemaRegistry,它看起来如下所示:AvroSchemaRegistry,AvroSchema本身如下所示:

代码语言:javascript
复制
{
   "type": "record",
   "name": "head",
   "fields":
   [
      {"name": "number", "type": ["string"]},
      {"name": "id", "type": ["string"]},
   ]
}

但我只得到了这个输出:

代码语言:javascript
复制
number,id
,

这是有意义的,因为我并没有特别指出这些值的位置。我以前使用过JsonPathReader,但它看起来只是这样:JsonPathReader,显然只给了我一张唱片。我不太确定如何配置这两种方法中的任何一种来输出我想要的结果。我会非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-08-19 21:10:35

使用ConvertRecord用于JSON,-> CSV主要用于“平面”->文件,其中对象中的每个字段都成为传出->文件中的一列。对于嵌套/复杂结构,请考虑JoltConvertRecord,它允许您执行更复杂的转换。您的示例似乎不像-原样是有效的JSON,但是假设您的输入是这样的:

代码语言:javascript
复制
{
  "meta": {
    "contentType": "Response"
  },
  "content": {
    "data": {
      "_type": "ObjectList",
      "erpDataObjects": [
        {
          "meta": {
            "lastModified": "2020-08-10T08:37:21.000+0000"
          },
          "head": {
            "fields": {
              "number": {
                "value": "1"
              },
              "id": {
                "value": "10000"
              }
            }
          }
        },
        {
          "meta": {
            "lastModified": "2020-08-10T08:37:21.000+0000"
          },
          "head": {
            "fields": {
              "number": {
                "value": "2"
              },
              "id": {
                "value": "10001"
              }
            }
          }
        }
      ]
    }
  }
}

下面的抖动规范应该为您提供输出所需的内容:

代码语言:javascript
复制
[
  {
    "operation": "shift",
    "spec": {
      "content": {
        "data": {
          "erpDataObjects": {
            "*": {
              "head": {
                "fields": {
                  "number": {
                    "value": "[&4].number"
                  },
                  "id": {
                    "value": "[&4].id"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63489269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档