簡體   English   中英

通過BASH中的JSON文件讀取和循環

[英]Reading and Looping Through A JSON File in BASH

我有一個名為department_groups.json的JSON文件(見下文)。

基本上如果我提出commercial論證,我希望它能夠回歸:

commercial-team@domain.com

commercial-updates@domain.com

任何人都可以指導/幫助我這樣做嗎?

{
    "legal": {
        "google_groups":[
            ["Legal", "legal@domain.com"],
            ["Legal Team", "legal-team@domain.com"],
            ["Compliance Checks", "compliance@domain.com"]
        ],
        "samba_groups": ""
     },
    "commercial":{
        "google_groups":[
            ["Commercial Team", "commercial-team@domain.com"],
            ["Commercial Updates", "commercial-updates@domain.com"]
        ],
        "samba_groups": ""  
    },
    "technology":{
        "google_groups":[
            ["Technology", "technology@domain.com"],
            ["Incidents", "incidents@domain.com"]
        ],
        "samba_groups": ""
    }
}

這將返回commercial屬性的google_groups屬性中每個數組中的第二個元素:

jq --arg key commercial '.[$key].google_groups | .[] | .[1]' file

使用jq -r以“原始”格式輸出(丟失雙引號)。

$ key=commercial
$ jq -r --arg key "$key" '.[$key].google_groups | .[] | .[1]' file
commercial-team@domain.com
commercial-updates@domain.com

我在這些示例中使用了--arg來顯示它是如何使用的,可選地使用shell變量。 另一方面,如果commercial只是一個固定的字符串,那么你可以簡化:

jq -r '.commercial.google_groups | .[] | .[1]' file

要處理輸出的每一行,您可以while read循環時使用shell:

key=commercial
while read -r email; do
  echo "$email"
  # process each email individually here
done < <(jq -r --arg key "$key" '.[$key].google_groups | .[] | .[1]' file)

這里我使用的是進程替換<() ,它就像一個可以由shell處理的文件。 與使用管道相比,這樣做的一個優點是不會創建子shell。 除此之外,這意味着循環中使用的變量在while塊之后仍然在范圍內,因此您可以在以后使用它們。

如果您更喜歡使用管道,只需在done后移除部件並將命令移至第一行:

jq ... | while read -r email; do # etc.

正如@TomFenech指出的那樣,要求有點不清楚,但如果它是你想要的電子郵件地址,他的答案的以下變體可能會引起關注:

key=commercial
$ jq -r --arg key "$key" '.[$key].google_groups[][] | select(test("@"))' department_groups.json
commercial-team@domain.com
commercial-updates@domain.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM