使用jq删除空结果



我想删除空结果,它目前看起来像这样

{
"profile": "test1",
"services": [
{
"name": "app",
"version": "1.3.2"
}
]
}
{
"profile": "test2",
"services": []
}

我不希望test2显示,因为它是空的。这是我当前正在运行的命令

cat data.json | jq '.[] | {profile: .profile, services: [.clusters[].services[]| select(.taskdef[] | .name=="app" and .version=="1.3.2") | .taskdef[] ]}'

这是data。json

的示例
[{
"profile": "test1",
"clusters": [{
"cluster": "test1-cluster1",
"services": [{
"servicename": "cluster1-service",
"taskdef": [{
"name": "app",
"version": "1.3.3"
}]
}]
},
{
"cluster": "test1-cluster2",
"services": [{
"servicename": "cluster2-service",
"taskdef": [{
"name": "app",
"version": "1.3.2"
}]
}]
}
]
},
{
"profile": "test2",
"clusters": [{
"cluster": "test2-cluster1",
"services": [{
"servicename": "cluster1-service",
"taskdef": [{
"name": "app",
"version": "1.4.0"
}]
}]
}]
}

)

我一直在尝试使用select(length>0)但是我不能得到语法正确。

您可以简单地将以下内容添加到现有的管道中:

| select(.services!=[])

或者您可以重写查询:

.[]
| [.clusters[].services[] 
| select(.taskdef[] | .name=="app" and .version=="1.3.2") 
| .taskdef[] ] as $services
| select($services!=[])
| {profile, $services}

最新更新