Nan*_*nju 29 python json amazon-s3 amazon-web-services boto3
我一直在S3桶"测试"中关注JSON
{
'Details' : "Something"
}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码来读取此JSON并打印"详细信息"键
s3 = boto3.resource('s3',
aws_access_key_id=<access_key>,
aws_secret_access_key=<secret_key>
)
content_object = s3.Object('test', 'sample_json.txt')
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(repr(file_content))
print(json_content['Details'])
Run Code Online (Sandbox Code Playgroud)
我收到错误,因为'字符串索引必须是整数' 我不想从S3下载文件,然后阅读..
bas*_*flp 28
如上面的评论所述,repr必须删除,json文件必须使用双引号的属性.在aws/s3上使用此文件:
{
"Details" : "Something"
}
Run Code Online (Sandbox Code Playgroud)
和以下Python代码,它的工作原理:
import boto3
import json
s3 = boto3.resource('s3')
content_object = s3.Object('test', 'sample_json.txt')
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(file_content)
print(json_content['Details'])
# >> Something
Run Code Online (Sandbox Code Playgroud)
alu*_*ach 22
想补充一点,它botocore.response.streamingbody适用于json.load:
import json
import boto3
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key)
data = json.load(obj.get()['Body'])
Run Code Online (Sandbox Code Playgroud)
Haf*_*man 10
以下对我有用.
# read_s3.py
import boto3
BUCKET = 'MY_S3_BUCKET_NAME'
FILE_TO_READ = 'FOLDER_PATH/my_file.json'
client = boto3.client('s3',
aws_access_key_id='MY_AWS_KEY_ID',
aws_secret_access_key='MY_AWS_SECRET_ACCESS_KEY'
)
result = client.get_object(Bucket=BUCKET, Key=FILE_TO_READ)
text = result["Body"].read().decode()
print(text['Details']) # Use your desired JSON Key for your value
Run Code Online (Sandbox Code Playgroud)
对于最佳实践,直接对AWS ID和密钥进行硬编码并不是一个好主意.您可以从存储在本地存储中的json文件中读取AWS凭据,如下所示:
import json
credentials = json.load(open('aws_cred.json'))
client = boto3.client('s3',
aws_access_key_id=credentials['MY_AWS_KEY_ID'],
aws_secret_access_key=credentials['MY_AWS_SECRET_ACCESS_KEY']
)
Run Code Online (Sandbox Code Playgroud)
您可以在 AWS Lambda 中使用以下代码从 S3 存储桶读取 JSON 文件并使用 python 对其进行处理。
import json
import boto3
import sys
import logging
# logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
VERSION = 1.0
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket = 'my_project_bucket'
key = 'sample_payload.json'
response = s3.get_object(Bucket = bucket, Key = key)
content = response['Body']
jsonObject = json.loads(content.read())
print(jsonObject)
Run Code Online (Sandbox Code Playgroud)