将JSON写入S3存储桶中的文件

Lea*_*ing 4 python boto3

这段代码将json写到s3中的文件中,我想要实现的不是打开data.json文件并写入s3(sample.json)文件,

我如何直接传递json并写入s3中的文件?

import boto3

s3 = boto3.resource('s3', aws_access_key_id='aws_key', aws_secret_access_key='aws_sec_key')
s3.Object('mybucket', 'sample.json').put(Body=open('data.json', 'rb'))
Run Code Online (Sandbox Code Playgroud)

小智 31

我不知道是否有人仍在尝试使用此线程,但我尝试使用上述方法将 JSON 上传到 s3,这对我来说并不奏效。Boto 和 s3 自 2018 年以来可能发生了变化,但这对我来说取得了成果:

import json
import boto3

s3 = boto3.client('s3')
json_object = 'your_json_object here'
s3.put_object(
     Body=json.dumps(json_object),
     Bucket='your_bucket_name',
     Key='your_key_here'
)
Run Code Online (Sandbox Code Playgroud)

  • 为什么使用`str()`?`json.dumps()`(复数 dumps)创建一个 JSON 格式的字符串。 (6认同)

Uwe*_*der 10

我不确定是否能正确回答问题。您只想使用Boto3将JSON数据写入文件?以下代码将python字典写入JSON文件。

import json
import boto3    
s3 = boto3.resource('s3')
s3object = s3.Object('your-bucket-name', 'your_file.json')

s3object.put(
    Body=(bytes(json.dumps(json_data).encode('UTF-8')))
)
Run Code Online (Sandbox Code Playgroud)

  • @Sledge - 不在存储桶中,文件名包含该信息: `s3.Object('your-bucket-name', 'folder/subfolder/your_file.json')` (5认同)
  • 您还应该指定内容类型。如果您使用此方法,则应添加 ContentType 参数,例如: s3object.put( Body=(bytes(json.dumps(json_data).encode('UTF-8'))), ContentType='application/json ') (3认同)

Usm*_*kil 7

Amazon S3 是一个对象存储(实际上是文件存储)。主要操作是 PUT 和 GET。您不能将数据添加到 S3 中的现有对象中。您只能替换整个对象本身。

有关您可以在 s3 上执行的可用操作列表,请参阅此链接 http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectOps.html