首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建Json输出Boto3

创建Json输出Boto3
EN

Stack Overflow用户
提问于 2017-06-25 11:35:41
回答 2查看 7.5K关注 0票数 2

我有以下代码:

代码语言:javascript
复制
import boto3
import datetime
import json

now = datetime.datetime.now()

cw = boto3.client('cloudwatch', region_name='sa-east-1')
s3client = boto3.client('s3')

# Get a list of all buckets
allbuckets = s3client.list_buckets()

# Iterate through each bucket
for bucket in allbuckets['Buckets']:
    # For each bucket item, look up the cooresponding metrics from CloudWatch
    response = cw.get_metric_statistics(Namespace='AWS/S3',
                                        MetricName='BucketSizeBytes',
                                        Dimensions=[
                                            {'Name': 'BucketName', 'Value': bucket['Name']},
                                            {'Name': 'StorageType', 'Value': 'StandardStorage'},
                                        ],
                                        Statistics=['Average'],
                                        Period=3600,
                                        StartTime=(now-datetime.timedelta(days=2)).isoformat(),
                                        EndTime=now.isoformat()
                                        )
    for item in response["Datapoints"]:
            data = {}
            data['data'] = []
            data['data'].append ({'#BUCKET_NAME': bucket["Name"]})
            json_str = json.dumps(data)
            print json_str

输出为:

代码语言:javascript
复制
{"data": [{"#BUCKET_NAME": "bucket1"}]}
{"data": [{"#BUCKET_NAME": "bucket2"}]}
{"data": [{"#BUCKET_NAME": "bucket3"}]}
{"data": [{"#BUCKET_NAME": "bucket4"}]}

但我需要以下格式的输出:

代码语言:javascript
复制
    {"data":[{"{#BUCKET_NAME}":"bucket1"},{"{#BUCKET_NAME}":"bucket2"},
             {"{#BUCKET_NAME}":"bucket3"},{"{#BUCKET_NAME}":"bucket4"}]}

我哪里做错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-25 13:47:02

您正在创建一个新的字典,并在循环的每次迭代中打印它。如果您想要存储桶的名称,您只需要以下内容:

代码语言:javascript
复制
# Iterate through each bucket
data = []
for bucket in allbuckets['Buckets']:
   data.append[{'#BUCKET_NAME': bucket["Name"]}]
data = {'data':data}
json_str = json.dumps(data)
print json_str

如果你想使用列表理解:

代码语言:javascript
复制
data = [{'#BUCKET_NAME': bucket["Name"]} for bucket in allbuckets['Buckets']]
data = {'data':data}
json_str = json.dumps(data)
print json_str
票数 2
EN

Stack Overflow用户

发布于 2017-06-25 14:07:42

代码是here....after helloV help:

代码语言:javascript
复制
import boto3
import json
import string

s3client = boto3.client('s3')
allbuckets = s3client.list_buckets()

data = [{"{#BUCKET_NAME}":bucket["Name"]} for bucket in allbuckets['Buckets']]
data = {"data":data}
json_pre = json.dumps(data)
json_pos = json_pre.translate(None, string.whitespace)
print json_pos

转换为删除空格是JSON格式所必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44742966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档