gpt4 book ai didi

json - 根据子对象数组中的值进行选择

转载 作者:行者123 更新时间:2023-12-04 01:00:02 25 4
gpt4 key购买 nike

我正在尝试自动化更新 AWS Lambda 层和使用它们的函数的过程。为了获得使用特定层的函数列表,我在列出我的账户中的当前函数时解析 AWS CLI 的 JSON 输出。调用 aws lambda list-functions 返回一个类似于下面示例的 JSON block (我特意删除了一些不相关的内容以关注问题):

{
"Functions": [
{
"TracingConfig": {
"Mode": "PassThrough"
},
"FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-1"
},
{
"Layers": [
{
"CodeSize": 11359101,
"Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer1:12"
}
],
"TracingConfig": {
"Mode": "PassThrough"
},
"FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-2"
},
{
"Layers": [
{
"CodeSize": 11359101,
"Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer1:12"
},
{
"CodeSize": 11359101,
"Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer2:5"
}
],
"TracingConfig": {
"Mode": "PassThrough"
},
"FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-3"
}
]
}

在上面的示例中,我定义了三个函数,其中两个函数至少使用了一层。我需要做的是获取使用特定层的函数的 FunctionArn 值列表。到目前为止,我已经能够使用此命令过滤掉不使用任何层的函数:

aws lambda list-functions | jq '.Functions[] | select(.Layers)'

我真正需要做的是创建一个 select() 语句,它可以从顶层过滤“Layers”数组:

aws lambda list-functions | jq '.Functions[] | select(.Layers[] | contains("layer2"))'

https://jqplay.org/s/SiFSE3RxZV

但我不断收到“无法迭代 null”错误消息,我认为这些消息来自 select() 语句?

计划是将列表过滤为使用相关特定层的函数,然后返回每个结果的 FunctionArn 值以供在我的脚本中使用。

最佳答案

Functions 的元素中,选择具有 Layers 键的元素,其值 - 一个数组 - 包含至少一个具有 layer2 的对象Arn 字段中的一个子字符串 - 一个字符串-,并提取它们的 FunctionArn。例如:

.Functions[] | select(has("Layers") and any(.Layers[].Arn; index("layer2"))) | .FunctionArn

关于json - 根据子对象数组中的值进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59124696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com