资讯动态

如何用 jq 的 @csv 过滤器把 JSON 数组转为 CSV 并正确处理字段引号

发布时间:2026/9/10 5:54:17 来源:尧图企业网站定制
如何用 jq 的 csv 过滤器把 JSON 数组转为 CSV 并正确处理字段引号【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq手头有一批 JSON 数组数据需要输出为 CSV 文本比如给表格软件或其他非 JSON 系统读取但又担心字段里的双引号把 CSV 列结构撑坏。jq 的csv内建过滤器专门解决这件事它把一个 JSON 数组渲染成一行 CSV字符串字段自动加双引号字段内部已有的引号用重复写成两个的方式转义。配合--raw-output-r选项输出的就是裸 CSV 文本而不是外层还包着引号的 JSON 字符串。前提是你已经安装了 jq。README.md 给出的获取方式有三种从 GitHub release 页下载预编译二进制、拉取 Docker 镜像ghcr.io/jqlang/jq:latest、或从源码编译需要 libtool、make、automake、autoconf执行./configure --with-onigurumabuiltin、make -j8、make install。本文以已经能运行jq命令为准。csv 的输入要求与转义规则按 manual 的 Format strings and escaping 一节预编译的手页 jq.1.prebuilt 中是同一描述输入必须是数组The input must be an array。csv属于foo格式化语法家族同族的还有tsv、html、uri、sh、base64等可以单独作为过滤器使用渲染为 CSV 时字符串字段用双引号包裹字符串内部的引号通过重复来转义一个写成。也就是说字段引号怎么处理不需要你手动做把 JSON 数组交给csv加引号、转义引号都是它完成的。你的工作只是构造正确的过滤器和输入。单个数组转一行 CSV最短路径echo [name, value] | jq -r csv依据文档规则字符串字段加双引号上面的示例输出为name,value字段里带引号时转义规则就体现在结果里。下面这个输入中第二个字段含有两个双引号示例结果echo [a, He said \hi\, b] | jq -r csva,He said hi,b两个就是原文里一个的转义形式这是 CSV 的常见写法下游按 CSV 规则解析即可还原。这里的-r--raw-output是必选项。manual 对它的说明是结果如果是字符串直接写到标准输出而不是按 JSON 字符串加引号格式化。不加-r时echo [a,b] | jq csv输出是带外层引号的 JSON 字符串示例结果a,b得到的是一个包含 CSV 内容的 JSON 字符串不是 CSV 文件能用的文本所以转 CSV 时要用-r。多个数组逐行输出jq 把输入当作一串 JSON 值逐个交给过滤器处理所以如果输入是行的数组需要先用迭代器[]取出每一行再csvecho [[name,value],[a,1],[b,2]] | jq -r .[] | csv示例结果每行一个数组各输出一行 CSVname,value a,1 a,2注意最后一行是b,2的笔误纠正——实际按规则每行输出应为name,value a,1 b,2如果输入文件里本来就是多个顶层 JSON 数组而不是套在外层数组里可以直接对每个输入值跑过滤器例如jq -r csv data.jsonjq 会对每个 JSON 值各产生一行 CSV。结果通过标准输出可用 shell 重定向保存为文件如... | jq -r .[] | csv out.csv这一步是 shell 行为与 jq 无关。用官方测试用例核对引号行为仓库自带的测试集里有csv的官方用例见 tests/jq.test 第 72 行附近过滤器为[1,.]|csv输入字符串!()\\t含单引号、双引号和制表符期望输出文档示例测试文件里以 JSON 编码书写为1,\!()\\\t\解码成实际输出就是1,!() 位置是一个字面制表符。对照文档规则可以逐点验证数字1原样输出字符串字段整体被双引号包裹字段内原本的双引号变成了单引号和制表符不做额外转义。如果你是从源码构建 jqREADME.md 中的编译步骤构建流程里的make check会运行包含此用例的测试套件这是文档中给出的、可执行的整体验证方式。限制输入必须是数组这是 manual 对csv的明确约束输入非数组时不满足其使用条件。csv只做渲染为 CSV这一件事文档中未提供反向的 CSV 解析过滤器转回去需要其他工具。转义行为只有文档规定的两条字符串加双引号、引号重复转义。对于换行等其它字符如何处理manual 没有描述不要基于本文推断其行为。相关文档docs/content/manual/manual.ymlcsv所在的 Format strings and escaping 小节与 Invoking jq 选项说明、tests/jq.testcsv官方用例、jq.1.prebuilt手页。【免费下载链接】jqCommand-line JSON processor项目地址: https://gitcode.com/GitHub_Trending/jq/jq创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价