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

如何使用jq在JSON转CSV过程中去除重复address属性与重复JSON数组

你的命令为啥会重复输出表头和数据呢?因为jq默认是逐个处理输入里的每个JSON实体的——你提供的输入包含两个完全独立的JSON数组,所以原命令会分别对每个数组执行一次完整的处理流程,结果就导致表头和数据都输出了两遍。

要解决这个问题,核心是先把所有输入的JSON数组合并成一个统一的数据集,再进行去重和CSV转换。这里可以用jq的-s(slurp)选项和flatten函数来实现:

修正后的命令

jq -r -s '["Name","Address","Status"], (flatten | unique_by(.address)[] | [.name, .address, .status]) | @csv' sample.json > sample.csv

命令拆解

咱们一步步看这个命令的作用:

  1. -s选项:把输入中的所有JSON结构(这里是两个数组)合并成一个顶级数组,变成[[对象1, 对象2,...], [对象1, 对象2,...]]的嵌套形式。
  2. flatten函数:把这个嵌套的二维数组展开成一维数组,这样就得到了包含10个元素的列表(原始的5个对象各重复一次)。
  3. unique_by(.address):按照address属性对所有元素去重,保留每个地址第一次出现的条目(比如Kolkata对应的第一个条目是Ram的记录)。
  4. 最后生成表头和对应的CSV行,整个流程只执行一次,所以表头和数据都只会输出一遍。

预期输出

执行这个命令后,你会得到完全符合需求的结果:

"Name","Address","Status"
"Ram","Kolkata","active"
"Kishore","Hyderabad","active"
"Manu","Kerala","active"
"Adam","Bangalore","inactive"

(注:行的顺序可能会因jq内部处理逻辑略有差异,但内容和去重效果完全满足你的要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:27:29