python - Cloudwatch 原始 json 到 python 中的 JSON 提取
问题描述
我正在尝试创建一个 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'])
请帮忙!
解决方案
正如@jellycsc 所指出的,您可以简单地使用json.dumps()
将返回JSON
的内容转换为字典。但是要从返回的响应中提取字段,不确定为什么要将其转换为json
然后提取字段。
describe_alarms
call 已经返回了一个字典列表,我们可以简单地使用并提取我们想要的任何字段,响应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:日期时间类型的对象不是 JSON 可序列化的
所以只需要手动处理,所以额外的类,取决于你的要求,你可以随心所欲地处理。
该json.dumps
方法可以接受一个名为 default 的可选参数,该参数应该是一个函数。每次 JSON 尝试转换一个不知道如何转换的值时,它都会调用我们传递给它的函数。该函数将接收有问题的对象,并期望返回该对象的 JSON 表示。
我没有任何INSUFFICIENT_DATA
状态警报,所以我使用了ALARM
状态。
推荐阅读
- php - PHP SoapClient - 连接到 wsdl 操作超时
- python-3.x - 如何为机器学习生成人工序列数据?
- dll - g++ 无法识别 dll 的文件格式
- django - Success_url 来自 FormView 中创建的对象 url
- haskell - 复合镜头不能装订吗?
- java - 使用 AsyncTask 时如何获取插入对象的 ID?
- clojure - Is this a bug? NullPointerException when trying to generate from s/or spec which includes nil
- jpa - 多个父级发生 JPA dataIntegrityViolationException
- php - 如何在 PostgreSQL 中实现循环
- javascript - 在浏览器中下载视频,而不是在新标签中播放 [CORS]