我有一个csv文件,我想将其转换为Avro;因为没有工具可以直接从csv转换为avro,我决定使用在线工具从csv转换为json,然后我打算编写一个小程序来转换json转换为avro模型。 我遇到的问题是csv文件看起来像这样
H1,H2,H3
------------------
A1,A2,A3,A4,A4
B1,B2,B3,B4
C1,C2,C3
H3之后的每一列都是H3阵列的一部分。 现有的工具似乎没有包含这个功能(这个说它确实如此,但我不知道如何使用它:http://www.convertcsv.com/csv-to-json.htm)。 有人知道如何处理这件事。
谢谢, Shripadsrd
答案 0 :(得分:0)
您正在寻找的是根据一些嵌套参数包装您的JSON结果。基本上就是这样:
H1, H2, H3
------------------
A1, A2, A3, A4, A4
B1, B2, B3, B4
C1, C2, C3
对此:
[
{
"H1": "A1",
"H2": "A2",
"H3": [
"A3",
"A4",
"A4"
]
},
{
"H1": "B1",
"H2": "B2",
"H3": [
"B3",
"B4"
]
},
{
"H1": "C1",
"H2": "C2",
"H3": [
"C3"
]
}
]
创建了一个解决此类问题的工具
您需要做的是调整标题,以便明确说明您希望如何嵌套结果。 对于您的示例,它看起来像:
H1, H2, H3.0, H3.1, H3.2
A1, A2, A3, A4, A4
B1, B2, B3, B4
C1, C2, C3
注意如何使用点H3
,H3.0
,H3.1
重复H3.2
:这些点表示您希望如何将结果包装到H3
数组中。最后,按下"转换按钮"并且会提示您结果。
希望它有所帮助。
答案 1 :(得分:0)
我不熟悉Avro,但以下jq过滤器将执行转换
Jona Rodrigues描述。具体来说:如果文件filter.jq
包含
[
split("\n") # split string into lines
| (.[0] | split(",")) as $headers # split header
| (.[1:][] | split(",")) # split data rows
| select(length>0) # get rid of empty lines
| $headers[:-1] as $h1 # fixed headers
| .[:($h1|length)] as $p1 # fixed part
| .[($h1|length):] as $p2 # variable part
| (
[ [ $h1, $p1 ] # \
| transpose[] # \ assemble fixed object
| {key:.[0], value:.[1]} # / from fixed keys and values
] | from_entries # /
) + {
($headers[-1]): $p2 # assemble variable object
}
]
和data
包含
H1,H2,H3
A1,A2,A3,A4,A4
B1,B2,B3,B4
C1,C2,C3
然后命令
jq -M -R -s -r -f filter.jq data
将产生
[
{
"H1": "A1",
"H2": "A2",
"H3": [
"A3",
"A4",
"A4"
]
},
{
"H1": "B1",
"H2": "B2",
"H3": [
"B3",
"B4"
]
},
{
"H1": "C1",
"H2": "C2",
"H3": [
"C3"
]
}
]
答案 2 :(得分:0)
这可以在Powershell中完成。
Import-Csv "foo.csv" | ConvertTo-Json | Add-Content -Path "foo.json"
您也可以添加-compress开关以删除换行符
Import-Csv "foo.csv" | ConvertTo-Json -compress | Add-Content -Path "foo.json"