You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq处理含JSON列的多列TSV并输出其余原始列?

多列TSV混合JSON内容的jq处理方案

问题场景

处理单列全为JSON内容的TSV时,可以直接用如下命令提取字段:

jq --slurp '.[] | .a' <<< '{"a": 1}'$'\n''{"a": 2}'

输出结果:

1
2

但当TSV存在多列,其中一列为JSON格式时,直接用上述命令会触发解析报错:

jq --slurp '.[] | .a' <<< $'A\t{"a": 1}'$'\n''B\t{"a": 2}'

报错内容:

parse error: Invalid numeric literal at line 1, column 2

报错原因

jq默认会把输入的每行内容当做JSON格式解析,多列TSV的非JSON列内容不符合JSON语法,因此触发解析错误。

解决方案

使用jq的原始输入模式先按行读取纯文本,拆分制表符后再单独解析JSON列即可。

场景1:输出第一列 + 第二列JSON的a字段(制表符分隔)

命令:

jq -r 'split("\t") | [.[0], (.[1] | fromjson.a)] | @tsv' <<< $'A\t{"a": 1}'$'\n''B\t{"a": 2}'

输出:

A	1
B	2

场景2:保留所有原始列 + 追加提取的JSON字段

命令:

jq -r 'split("\t") | . + [.[1] | fromjson.a] | @tsv' <<< $'A\t{"a": 1}'$'\n''B\t{"a": 2}'

输出:

A	{"a": 1}	1
B	{"a": 2}	2

命令说明

  • -r/--raw-output:输出原始字符串,不会给结果自动添加多余的双引号
  • split("\t"):将每行纯文本按制表符拆分为数组,数组下标从0开始对应TSV的列顺序
  • fromjson:将指定列的JSON字符串解析为可操作的JSON对象
  • @tsv:自动将数组内容转换为标准TSV格式,自动处理特殊字符转义,无需手动拼接分隔符

内容的提问来源于stack exchange,提问作者user1424739

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:57:03