如何在一个命令中从对象的不同字段中提取一些值
How to extract some value from diff fields of an object in one command
有json这样的数据
➜ ~ cat foo.json | jq
{
"data": {
"foo": [
{
"table": "aaa"
},
{
"table": "bbb"
}
],
"bar": [
{
"table": "ccc"
},
{
"table": "ddd"
}
]
}
}
可以分别得到 foo 或 bar 的 table,
➜ ~ cat foo.json | jq '.data.foo[].table'
"aaa"
"bbb"
➜ ~ cat foo.json | jq '.data.bar[].table'
"ccc"
"ddd"
如何在一条命令中获取所有 table 值?
使用逗号运算符。
$ jq '.data["foo", "bar"][].table' foo.json
或
$ jq '.data | .foo, .bar | .[].table' foo.json
或者假设您想要获取 data
对象的任何 属性。
$ jq '.data[][].table' foo.json
如果您不关心 "table" 值出现在哪里,并且如果您想排除 null
和 false
值:
.. | .table? // empty
如果您想包含 null
和 false
值:
.. | objects | has("table") | .table
有json这样的数据
➜ ~ cat foo.json | jq
{
"data": {
"foo": [
{
"table": "aaa"
},
{
"table": "bbb"
}
],
"bar": [
{
"table": "ccc"
},
{
"table": "ddd"
}
]
}
}
可以分别得到 foo 或 bar 的 table,
➜ ~ cat foo.json | jq '.data.foo[].table'
"aaa"
"bbb"
➜ ~ cat foo.json | jq '.data.bar[].table'
"ccc"
"ddd"
如何在一条命令中获取所有 table 值?
使用逗号运算符。
$ jq '.data["foo", "bar"][].table' foo.json
或
$ jq '.data | .foo, .bar | .[].table' foo.json
或者假设您想要获取 data
对象的任何 属性。
$ jq '.data[][].table' foo.json
如果您不关心 "table" 值出现在哪里,并且如果您想排除 null
和 false
值:
.. | .table? // empty
如果您想包含 null
和 false
值:
.. | objects | has("table") | .table