Cloudwatch原始json到python中的json提取

2024-06-16 10:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个python脚本来描述所有cloudwatch警报,并提取一些关键信息。我用boto3得到结果,但它是原始形式。如何将其格式化为json并仅提取所需内容

import json

# Create CloudWatch client
cloudwatch = boto3.client('cloudwatch')

# List alarms of insufficient data through the pagination interface
paginator = cloudwatch.get_paginator('describe_alarms')
for response in paginator.paginate(StateValue='INSUFFICIENT_DATA'):
    print(response['MetricAlarms'])

请帮忙


Tags: import脚本client信息json内容responsecreate
1条回答
网友
1楼 · 发布于 2024-06-16 10:41:55

正如@jellycsc所指出的,您可以简单地使用json.dumps()将返回的JSON转换为dict。但是要从返回的响应中提取字段,不确定为什么要将其转换为json,然后提取字段

describe_alarms调用已经返回了一个dict列表,我们可以简单地使用它并提取我们想要的任何字段,json.dumps的响应是一个字符串

#!/usr/bin/env python

import json
#!/usr/bin/env python

import json
import boto3
import datetime


def myconverter(o):
    if isinstance(o, datetime.datetime):
        return o.__str__()

# Create CloudWatch client
cloudwatch = boto3.client('cloudwatch')

# List alarms of insufficient data through the pagination interface
paginator = cloudwatch.get_paginator('describe_alarms')
for response in paginator.paginate(StateValue='ALARM'):
    metric_alarms = response.get('MetricAlarms')
    for metric_alarm in metric_alarms:
        print(metric_alarm.get('AlarmName'))
        # uncomment below if json objects are needed.
        # parsed_alarm_data = json.dumps(metric_alarm, default=myconverter)
        # print(type(parsed_alarm_data))
❯❯ python3 x.py
TargetTracking-table/mytable-AlarmLow-ab20db06-8e66-480c-9952-b9ed751c1003
TargetTracking-table/mytable2-AlarmLow-da22b0b5-987f-4d82-aa5a-0f2e83cc8abf

由于度量数据中的datetime对象不能直接序列化

TypeError: Object of type datetime is not JSON serializable

所以a只需要手动处理,所以一个额外的类,根据您的需求,您可以根据需要处理

json.dumps方法可以接受名为default的可选参数,该参数应为函数。每次JSON试图转换一个不知道如何转换的值时,它都会调用我们传递给它的函数。该函数将接收有问题的对象,并期望返回该对象的JSON表示

我没有任何处于INSUFFICIENT_DATA状态的警报,所以我使用了ALARM状态

相关问题 更多 >