我正在尝试将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"
}
}
}
}
}
}
}
}
}
]
https://stackoverflow.com/questions/63489269
复制相似问题