返回

巧用命令行,json轻松导出csv!

后端

对于程序员来说,年终最令头疼的一件事,莫过于将接口数据导出为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
'

使用说明

  1. 复制上述命令行指令。

  2. 打开终端窗口。

  3. 将json数据文件拖拽到终端窗口中。

  4. 回车执行命令。

  5. 导出的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数据。
  • 无需编程: 无需编写任何代码,即使是编程小白也能轻松使用。
  • 数据准确: 导出结果准确无误,保证数据完整性。

结语

掌握了这条命令行指令,你就可以告别繁琐的数据导出工作,将更多的时间投入到更有价值的事情上。希望这篇文章能为你的工作带来便利,提升你的效率!