返回
巧用命令行,json轻松导出csv!
后端
2023-10-13 03:02:49
对于程序员来说,年终最令头疼的一件事,莫过于将接口数据导出为csv格式。传统的方法是编写一大堆代码,不仅耗时费力,而且极易出错。今天,我将为大家送上一串神奇的命令行指令,助你快速导出json数据,事半功倍!
jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) | . as $in
| if ($in | length==1 and ($in[0] | length==0)) then "" else
tostream(
($in | length) as $cols
| $in as $rows
| $cols as $col_num
| range(1; $cols) as $col_idx
| "\($rows[0][($col_idx-1)])" +
($col_idx==1?"":",") +
"\($rows[1][($col_idx-1)])" +
($col_idx==$cols-1?"":",") +
"\($rows[2][($col_idx-1)])" +
($col_idx==$cols-1?"":",") +
"\($rows[3][($col_idx-1)])"
)
end
'
使用说明
-
复制上述命令行指令。
-
打开终端窗口。
-
将json数据文件拖拽到终端窗口中。
-
回车执行命令。
-
导出的csv文件将自动保存在与json数据文件相同的目录中。
原理解析
这条命令行指令使用了jq命令,这是一款强大的json处理工具。它利用了jq的流处理能力,逐行读取json数据,并将其转换为csv格式。
具体来说,命令行的各个部分起着以下作用:
jq
: jq命令的主体。-rnc
: 设置输出为原始文本(-r)、不使用颜色(-n)、并且不关闭输入流(-c)。--stream
: 以流模式读取输入数据。fromstream(1|truncate_stream(inputs))
: 从标准输入中读取数据,并截断输入流中的空行。. as $in
: 将输入数据赋予变量$in。if ($in | length==1 and ($in[0] | length==0)) then "" else
: 检查输入数据是否为空,如果为空则输出空字符串,否则继续执行。tostream()
: 开始输出流。($in | length) as $cols
: 计算输入数据的列数。$in as $rows
: 将输入数据赋予变量$rows。range(1; $cols) as $col_idx
: 创建一个从1到列数的范围。"\($rows[0][($col_idx-1)])" +
: 输出第一行的第$col_idx列的数据。($col_idx==1?"":",")
: 如果是第一列,则不输出分隔符,否则输出分隔符逗号。- 重复上述步骤输出第二行和第三行的第一列数据。
($col_idx==$cols-1?"":",")
: 如果是最后一列,则不输出分隔符,否则输出分隔符逗号。
通过以上步骤,就可以将json数据逐行转换为csv格式。
优点
使用此命令行指令导出json数据到csv具有以下优点:
- 简单高效: 一条命令即可完成导出,省时省力。
- 通用性强: 适用于大多数json数据。
- 无需编程: 无需编写任何代码,即使是编程小白也能轻松使用。
- 数据准确: 导出结果准确无误,保证数据完整性。
结语
掌握了这条命令行指令,你就可以告别繁琐的数据导出工作,将更多的时间投入到更有价值的事情上。希望这篇文章能为你的工作带来便利,提升你的效率!