求助: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
相关产品推荐
相关产品推荐

