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

求助:Linux终端Shell脚本提取JSON对象所有嵌套键路径

提取JSON嵌套键为点分隔格式的Shell解决方案

嘿,这个需求用jq工具就能完美解决——它是Linux终端处理JSON数据的标配工具,大多数发行版都能通过包管理器快速安装:

  • Debian/Ubuntu系:sudo apt install jq
  • RHEL/CentOS系:sudo yum install jq

针对你的需求,具体命令如下:

假设你的JSON文件名为data.json,内容是你提供的示例:

{ "general" : { "street" : "Av. Roadmin", "name" : "Batman", "phone" : "125478", "pets": { "dog":"Hurry", "cat": "Aria" } } }

1. 每行输出一个键路径

执行这条命令:

jq -r 'paths | join(".")' data.json

输出结果:

general.street
general.name
general.phone
general.pets.dog
general.pets.cat

2. 一行输出所有键路径(空格分隔)

如果想要和你期望的格式完全一致(一行空格分隔),可以调整命令:

jq -r '[paths | join(".")] | join(" ")' data.json

输出结果:

general.street general.name general.phone general.pets.dog general.pets.cat

命令解释

  • paths:遍历JSON结构中的所有键路径,返回每个路径的数组形式(比如["general", "street"])
  • join("."):把路径数组用点号连接成字符串
  • [... | join(".")]:将所有路径字符串收集成一个数组
  • join(" "):把数组元素用空格连接成一行
  • -r:让jq输出原始字符串(不带引号)

扩展:忽略数组索引(如果需要)

如果你的JSON包含数组,paths会默认输出数组索引(比如items.0)。如果只想提取对象的键路径,可以改用:

jq -r 'paths(scalars) | join(".")' data.json

scalars会只指向JSON中的标量值(字符串、数字、布尔值、null),跳过数组的索引节点。

内容的提问来源于stack exchange,提问作者Borja García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:06