[英]jq - looping through json object and only displaying certain values
我目前正在学习如何使用jq
。 我有一个 json object 并且我可以使用jq
循环和读取值,例如cat test.json | jq -r '.test'
cat test.json | jq -r '.test'
。 但是,当我只想显示已outdated
或deprecated
= true
但如果relase
= never-update-app
或never-upgrade-app
从结果中省略的值时,我遇到了一些复杂性。 我正在尝试cat test.json | jq '.test | select(.[].outdated==true)'
cat test.json | jq '.test | select(.[].outdated==true)'
cat test.json | jq '.test | select(.[].outdated==true)'
但这不会返回所需的结果。 这是否可以通过 jq 实现并以以下所需格式显示?
我想要的 output 如下图所示:
Release Name Installed Latest Old Deprecated
test-app 1.0.0 2.0.0 true false
json:
{
"test": [{
"release": "myapp1",
"Installed": {
"version": "0.3.0",
"appVersion": "v1.2.6"
},
"Latest": {
"version": "",
"appVersion": ""
},
"outdated": false,
"deprecated": false
}, {
"release": "myapp2",
"Installed": {
"version": "6.5.13",
"appVersion": "1.9.1"
},
"Latest": {
"version": "",
"appVersion": ""
},
"outdated": false,
"deprecated": false
}, {
"release": "test-app",
"Installed": {
"version": "1.0.0",
"appVersion": ""
},
"Latest": {
"version": "2.0.0",
"appVersion": ""
},
"outdated": true,
"deprecated": false
}, {
"release": "never-update-app",
"Installed": {
"version": "1.0.0",
"appVersion": ""
},
"Latest": {
"version": "3.0.0",
"appVersion": ""
},
"outdated": true,
"deprecated": false
}, {
"release": "never-upgrade-app",
"Installed": {
"version": "2.0.0",
"appVersion": ""
},
"Latest": {
"version": "2.0.0",
"appVersion": ""
},
"outdated": false,
"deprecated": true
}]
}
您在.test
中有一个数组。 如果要提取该数组的各个元素以在过滤器的 rest 中使用,请使用.test[]
。 如果要处理它们但将结果保存在数组中,请使用.test|map(...)
其中...
是要应用于数组元素的过滤器。
如本问题所述,您可以将select()
过滤器与多个条件一起使用。 因此,例如:
jq '.test[]|
select(
(.outdated or .deprecated) and
.release != "never-update-app" and
.release != "never-upgrade-app"
)'
使用括号,例如,假设您想用startswith
测试替换两个“never-”测试。 通过用括号包围管道,您可以隔离计算并获得真/假答案以组合在 boolean 表达式中。
jq '.test[]|
select(
(.outdated or .deprecated) and
(.release|startswith("never-")|not)
)'
我认为这个关于在表格中格式化结果的答案可能就足够了。 如果您有更具体的需求,我认为您可能希望将其拆分为一个单独的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.