使用Bash迭代JSON字符串

use*_*045 0 bash json

我正在构建一个脚本来处理特定Chef /节点数据的JSON.我需要得到每个对象的名称,因为它每次都会有所不同.通常我使用jsawk但这只有在知道对象名称时才有用.

解决方案应适用于以下任一示例:

{"keepalived":{"role":"MASTER","vip":"192.168.4.113"},"mysql":{"service_name":"singularitydb"},"haproxy":{"role":"MASTER"}}
Run Code Online (Sandbox Code Playgroud)

应该返回:keepalived,mysql,haproxy

{"nginx":{"attribute":"standalone"},"haproxy":{"role":"MASTER"}}
Run Code Online (Sandbox Code Playgroud)

应该返回:nginx,haproxy

che*_*ner 5

用途jq:

echo "$JSON" | jq 'keys'
Run Code Online (Sandbox Code Playgroud)