我有一个名为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": ""
}
}
答案 0 :(得分:3)
这将返回google_groups
属性的commercial
属性中每个数组中的第二个元素:
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
循环:
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处理的文件。与使用管道相比,这样做的一个优点是不会创建子外壳。除其他外,这意味着循环中使用的变量在while
块之后仍保留在范围内,因此您以后可以使用它们。
如果您想使用管道,只需移除done
之后的零件并将命令移至第一行:
jq ... | while read -r email; do # etc.
答案 1 :(得分:0)
正如@TomFenech所指出的那样,要求有些不清楚,但是如果是您想要的电子邮件地址,则可能需要以下答案的变体:
java -cp "somepath/lib/*" mypackage.MainClass