我正在尝试解析AWS示例元数据,以获取两个值,并将它们组合成一个字符串(名称和ID)。名称有时是空的,而jq不想追加到null。我如何告诉jq只假设null值是空字符串?我看到过“解构”操作符或map函数来实现这一点,但我似乎无法使用任何语法。
这可能会使事情更加复杂,但是名称是作为值存储在键-值标记中的。.Tags[]|select(.Key == "Name").Value
.
以下是一些示例数据:
{
"InstanceId": "i-abc",
"Tags": [
{
"Key": "Name",
"Value": "Grafana"
}
]
}
{
"InstanceId": "i-def"
}
这是我在尝试的:
cat sample.json |jq -r '.|{together: (.InstanceId + " " + (.Tags[]|select(.Key == "Name").Value) // empty)}'
{
"together": "i-abc Grafana"
}
jq: error (at <stdin>:12): Cannot iterate over null (null)
4条答案
按热度按时间edqdpe6u1#
不要把事情复杂化:
.|
?
)。""
,而不是empty
。empty
是一个什么都不生成的生成器(效果有点混乱)。输出量:
如果您不想使用尾随空格,请使用0 stone 0的解决方案。
wlp8pajw2#
失败时,使用括号排除
.InstanceId
但包含" " + …
:第一个
Demo
nxagd54h3#
另一种方法是使用
select()
、end生成一个数组,然后让join(" ")
处理其余的内容:第一个
JqPlay(第一次)
1zmg4dgp4#
在我得到答案之前,我向一位朋友寻求帮助。他用另一种方法回应: