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

JQ新手求助:如何将嵌套JSON结构扁平化以转换为CSV

解决JQ扁平JSON结构的方案

Hey there! 作为JQ新手折腾这个确实挺费时间的,不过你的需求其实用JQ的几个核心操作就能轻松实现,我给你详细拆解下:

完整的JQ命令

jq 'map({title, updated_at} + (.fields | reduce .[] as $item ({}; . + ($item | with_entries(select(.key | IN("usernamevalue", "passwordvalue")))) ))' your-source-file.json

命令逐部分解释

  • map(...):遍历源JSON数组中的每一个对象,对每个条目单独处理,确保最终输出还是数组结构。
  • {title, updated_at}:快速从顶层对象中提取你需要保留的两个字段,这是JQ的语法糖,和{title: .title, updated_at: .updated_at}效果完全一致。
  • .fields | reduce .[] as $item ({}; . + (...)):处理嵌套的fields数组:
    • reduce用来遍历fields里的每一个子对象$item,初始值设为空对象{};
    • $item | with_entries(select(.key | IN("usernamevalue", "passwordvalue"))):筛选出每个子对象中键为usernamevalue和passwordvalue的条目,只保留这两个字段;
    • 最后用+把筛选后的键值对合并到初始的空对象里,把分散在fields数组中的目标字段整合到一个对象中。
  • +:把顶层提取的title、updated_at字段,和从fields中整合出的字段合并成一个扁平的对象,正好符合你要的目标结构。

兼容低版本JQ的写法(如果你的JQ版本低于1.6)

如果你的JQ版本不支持IN函数,可以把筛选部分换成index判断:

jq 'map({title, updated_at} + (.fields | reduce .[] as $item ({}; . + ($item | with_entries(select(.key | index(["usernamevalue", "passwordvalue"]) != null)) ))' your-source-file.json

测试验证

用你提供的源JSON运行命令后,会直接输出你期望的扁平结构,完美适配后续转CSV的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:48:13