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

如何使用jq处理NDJSON数据并输出指定格式的结果?

问题

我有如下NDJSON数据:

{"id": "one", "colors": [{"color": "blue"}, {"color": "red"}]}
{"id": "two", "colors": [{"color": "green"}]}

想要得到如下输出:

one blue
one red
two green

以下是两次失败的尝试:

尝试1

$ cat tmp/test.json | jq -r '.id, .colors[].color'

输出:

one
blue
red
two
green

尝试2

$ cat tmp/test.json | jq -r '[.id, .colors[].color]|@tsv'

输出:

one blue    red
two green

解决方案

用下面任意一个jq命令就能得到想要的结果:

方法一:通过变量保存当前对象

cat tmp/test.json | jq -r '. as $obj | .colors[] | "\($obj.id) \(.color)"'

方法二:向上遍历获取父级ID

cat tmp/test.json | jq -r '.colors[] | [../.id, .color] | @tsv'

为啥之前的尝试不对?

  • 尝试1用, 分隔输出字段,会把id和所有color拆成独立的行,没法建立id和单个color的对应关系;
  • 尝试2把id和所有color放到同一个数组里转TSV,导致一个id带着多个color出现在同一行,不符合需求。

正确逻辑说明

核心是要让每个colors数组里的颜色项,都能关联到它所属的id:

  • 方法一先把当前整个JSON对象存到变量$obj里,遍历colors时直接从变量里取id,再和当前颜色拼接成一行;
  • 方法二遍历colors的每个元素时,用../.id向上找到父级对象的id,再把id和color组成数组转成TSV输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:18