需要在一个数组中的json中搜索值,并使用jq提供另一个数组的输出

时间:2020-05-12 08:13:01

标签: json jq

我有一个下面的模式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”)) 但是,我无法合并名称并生成输出。 抱歉,听起来很傻,谢谢。

1 个答案:

答案 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)"