我有一个下面的模式json。
{
"a": [{
"metadata":{ "name":"raj"},
"status":[{
"state":
{ "sleeping":
{ "started":"2020-05-11T14:49:04Z",
"ID":"1002"}
}},{
"state":
{ "sleeping":
{ "started":"2020-05-11T14:49:04Z",
"ID":"1002"}
}}],
"phase":"sleeping"},
{
"metadata":{ "name":"tom"},
"status":[{
"state":
{ "sleeping":
{ "started":"2020-05-11T14:49:04Z",
"ID":"1002"}
}},{
"state":
{ "sleeping":
{ "started":"2020-05-11T14:49:04Z",
"ID":"1002"}
}}],
"phase":"sleeping"}]}
我需要使用jq的输出来过滤列表中状态为(.status []。state)的那些项的名称(.metadata.name),以以下格式休眠 名称ID 拉吉 到目前为止,我已经成功选择了睡眠状态。 jq'.a []。status [] | select(.state | has(“ terminated”)) 但是,我无法合并名称并生成输出。 抱歉,听起来很傻,谢谢。
答案 0 :(得分:0)
使用调用:
jq -r -f sleeping.jq pattern.json
sleeping.jq在哪里:
.a[]
| .metadata.name as $raj
| select( any(.status[].state; has("sleeping")) )
| "Name ID \($raj)"
结果是:
Name ID raj
Name ID tom
.a[]
| .metadata.name as $raj
| .status[].state
| select( has("sleeping"))
| "Name ID \($raj) \(.sleeping.ID)"