我有这样的JSON:
[
{
"source":
{
"file": "test",
"baz": "now"
}
},
{
"source": {
"dev": "foo"
}
},
{
"source": {
"bar": "bar"
}
}
]
我想得到file
或dev
的所有值的列表。因此,上述预期结果应该是:["test", "foo"]
我被困在这里:
.[].source | select(.file? or .dev?)
但这就产生了完整的物体。如何只访问比的属性值??
3条答案
按热度按时间vsaztqbk1#
您可以使用
.source | .file, .dev
或.source["file", "dev"]
同时遍历.file
和.dev
,然后使用values
(而不是?
)过滤空值。5anewei62#
不使用
?
或其他运算符,而使用getpath/1
是一种选择,您可以只过滤路径并获取它们的值或者甚至合并另一个条件来检查
source
键,如果你想完全确定的话。.[-2] == "source"
演示-https://jqplay.org/s/IddhVIbUenj
wwodge7n3#
下面是另一个使用
tostream
的选项,它本质上将下降到任何深度并提取"file"
或"dev"
键的值。在jqplay.org上试试。