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

如何对比JSON与数组并筛选匹配数据生成CSV?

解决方案:用jq结合Shell筛选JSON并转换为CSV

步骤1:准备Shell数组与JSON数据

假设你的JSON数据保存在data.json文件中,Shell数组定义如下:

arr=( test1 test3 )

步骤2:将Shell数组转换为jq可识别的JSON数组格式

通过Shell命令把普通数组转成jq能处理的JSON数组字符串:

jq_filter_arr=$(printf '"%s",' "${arr[@]}" | sed 's/,$//' | xargs echo "[" "]")

执行后jq_filter_arr的值为["test1","test3"]

步骤3:用jq筛选并生成CSV

执行以下命令完成筛选与格式转换:

jq -r --argjson filter "$jq_filter_arr" '.[0].key.objects[] | select(.name | IN($filter[])) | [.name, .some_values, ."other values"] | @csv' data.json

命令解释

  • --argjson filter "$jq_filter_arr":将处理后的JSON数组传入jq作为筛选条件变量
  • .[0].key.objects[]:遍历JSON结构中嵌套的objects数组
  • select(.name | IN($filter[])):筛选出name字段值存在于目标数组中的对象
  • [.name, .some_values, ."other values"]:指定CSV输出的字段顺序(注意带空格的键需用双引号包裹)
  • @csv:将选中的字段转换为标准CSV格式

输出结果

针对你提供的JSON数据,最终输出为:

"test1","some values",

(注:test1没有other values字段,对应位置为空值)

兼容低版本jq(<1.6)的写法

如果你的jq版本不支持IN函数,可替换为index:

jq -r --argjson filter "$jq_filter_arr" '.[0].key.objects[] | select($filter | index(.name)) | [.name, .some_values, ."other values"] | @csv' data.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:05:28