我正在尝试将JSON文件转换为CSV,但我似乎没有这样做的运气。我的JSON看起来是这样的:{{
{"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看起来像这样:
number,id 1,10000 2,10001
我的流程是这样的:
GetFile ->设置输出文件名-> ConvertRecord -> UpdateAttribute -> PutFile 。
ConvertRecord使用JsonTreeReader和CSVRecordSetWriter JsonTreeReader CsvRecordSetWriter 。他们都调用了一个AvroSchemaRegistry,它看起来如下所示: AvroSchemaRegistry ,AvroSchema本身如下所示:
{ "type": "record", "name": "head", "fields": {"name": "number", "type": ["string"]}, {"name": "id", "type": ["string"]}, }
但我只得到了这个输出:
number,id ,
这是有意义的,因为我并没有特别指出这些值的位置。我以前使用过JsonPathReader,但它看起来只是这样: JsonPathReader ,显然只给了我一张唱片。我不太确定如何配置这两种方法中的任何一种来输出我想要的结果。我会非常感谢你的帮助!
发布于 2020-08-19 21:10:35
使用ConvertRecord用于JSON,-> CSV主要用于“平面”->文件,其中对象中的每个字段都成为传出->文件中的一列。对于嵌套/复杂结构,请考虑JoltConvertRecord,它允许您执行更复杂的转换。您的示例似乎不像-原样是有效的JSON,但是假设您的输入是这样的:
{ "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" }
下面的抖动规范应该为您提供输出所需的内容:
[ "operation": "shift", "spec": { "content": { "data": { "erpDataObjects": { "*": { "head": { "fields": { "number": { "value": "[&4].number" "id": { "value": "[&4].id"