2016-06-24 64 views
0

我正在構建一個處理特定Chef/node數據的JSON的腳本。我需要獲取每個對象的名稱,因爲每次都會有所不同。通常我使用jsawk,但這隻有在知道對象的名稱時纔有用。用Bash迭代JSON字符串

{"keepalived":{"role":"MASTER","vip":"192.168.4.113"},"mysql":{"service_name":"singularitydb"},"haproxy":{"role":"MASTER"}} 

應返回:

解決辦法應該在任一下面的示例工作的keepalived,MySQL和HAProxy的

{"nginx":{"attribute":"standalone"},"haproxy":{"role":"MASTER"}} 

應返回:nginx的,HAProxy的

回答

5

使用jq

echo "$JSON" | jq 'keys' 
+0

它不適用於對象內部的對象,但作者可能不需要這樣 –

+0

這兩個示例都不需要。兩者都要求提供對象的頂級鍵。 – chepner

+0

我會給你介紹我的jq ...但我真的想遍歷鍵。 ((i = 0; i <$ jslength; i ++));這是否與此:'jslength = $(echo $ attributes | jq'keys | length') \t for做 \t \t結果= $(回聲$屬性| JQ '鑰匙' | JQ」 [$ i]。 「) \t \t回聲$結果 \t done' – user3063045