首页 > 解决方案 > 如何从 JSON Lambda 输出中提取一个值?

问题描述

我正在学习 python 和 JSON 库,并试图找出如何从这个 JSON 响应中提取特定的键/值。我正在使用 AWS Lambda,输出与 JSON 不完全一样,因为它内部有 "\。我不确定如何从那里提取一个值。

有什么想法可以在这里获得 releaseVersion 值吗?谢谢!

代码片段:

import json
import boto3
client = boto3.client('eks')
def lambda_handler(event, context):
        response = client.describe_nodegroup(
            clusterName='eks-cluster',
            nodegroupName='Eks-Node-1'
        )
        return json.dumps(response, default=str)

输出:

    "{\"ResponseMetadata\": {\"RequestId\": \"xxxxxx\", \"HTTPStatusCode\": 200, \"HTTPHeaders\": {\"date\": \"Sun, 20 Jun 2021 03:00:28 GMT\", \"content-type\": \"application/json\", \"content-length\": \"1294\", \"connection\": \"keep-alive\", \"x-amzn-requestid\": \"c1e99860-22df-4b9e-aa6c-ffbc3c7690f7\", \"access-control-allow-origin\": \"*\", \"access-control-allow-headers\": \"*,Authorization,Date,X-Amz-Date,X-Amz-Security-Token,X-Amz-Target,content-type,x-amz-content-sha256,x-amz-user-agent,x-amzn-platform-id,x-amzn-trace-id\",
     \"x-amz-apigw-id\": \"BNBT7F0mCYcFRzg=\", \"access-control-allow-methods\": \"GET,HEAD,PUT,POST,DELETE,OPTIONS\", \"access-control-expose-headers\": \"x-amzn-errortype,x-amzn-errormessage,x-amzn-trace-id,x-amzn-requestid,x-amz-apigw-id,date\", \"x-amzn-trace-id\": \"Root=1-60ceaf4c-5e181ebd4bdd49bd77c982b8\"}, \"RetryAttempts\": 0}, \"nodegroup\": 
{\"nodegroupName\": \"Eks-Node-1\", \"nodegroupArn\": \"arn:aws:eks:us-east-2:xxxxxx:nodegroup/eks-cluster/Eks-Node-1/cebd1393-ca31-cd8f-6d28-9bdd22617dcd\", \"clusterName\": \"eks-cluster\", \"version\": \"1.18\", \"releaseVersion\": \"1.18.9-20210526\", \"createdAt\": \"2021-06-20 02:02:23.899000+00:00\", \"modifiedAt\": \"2021-06-20 02:52:31.397000+00:00\", \"status\": \"ACTIVE\", \"capacityType\": 
    \"SPOT\", \"scalingConfig\": {\"minSize\": 2, \"maxSize\": 2, \"desiredSize\": 2}, \"instanceTypes\": [\"t3.micro\"], \"subnets\": [\"subnet-5b0dec30\", \"subnet-dff27493\", \"subnet-fbca9581\"], \"remoteAccess\": {\"ec2SshKey\": \"ssht\"}, \"amiType\": \"AL2_x86_64\", \"nodeRole\": 
    \"arn:aws:iam::xxxxxxxx:role/EKS-NodeGroups-Role\", \"labels\": {}, \"resources\": {\"autoScalingGroups\": [{\"name\": 
    \
"eks-cebd139xxxxxxdd22617dcd\"}], \"remoteAccessSecurityGroup\": \"sg-0810575351f982840\"}, \"diskSize\": 4, \"health\": {\"issues\": []}, \"tags\": {}}}"

标签: pythonamazon-web-servicesaws-lambda

解决方案


response变量应包含 Python 字典对象中的数据。

boto3 文档describe_nodegroup()将输出显示为:

{
    'nodegroup': {
        'nodegroupName': 'string',
        'nodegroupArn': 'string',
        'clusterName': 'string',
        'version': 'string',
        'releaseVersion': 'string',
        ...
        },
     ...
    }
}

因此,您应该能够使用:return response['nodegroup']['releaseVersion']


推荐阅读