[英]Parsing a JSON file from a S3 Bucket
我對亞馬遜 Web 服務比較陌生。
我需要有關使用 Python 從 S3 存儲桶解析 JSON 文件的幫助。我能夠使用連接到 lambda function 的 S3 觸發器從 S3 讀取 JSON 文件並將其顯示在 Cloud-Watch 上。 我需要有關如何解析 JSON 文件中的“結果”並計算“結果”的最大值、最小值和平均值的幫助。
這是我的 JSON 文件:
Student = [{"Student_ID": 1,
"Name":"Erik",
"ExamSubject": "English",
"Result": 72.3,
"ExamDate": "9/12/2020",
"Sex": "M"},
{"Student_ID": 2,
"Name":"Daniel",
"ExamSubject": "English",
"Result": 71,
"ExamDate": "9/12/2020",
"Sex": "M"},
{"Student_ID": 3,
"Name":"Michael",
"ExamSubject": "English",
"Result": 62,
"ExamDate": "9/12/2020",
"Sex": "M"},
{"Student_ID": 4,
"Name":"Sven",
"ExamSubject": "English",
"Result": 73,
"ExamDate": "9/12/2020",
"Sex": "M"},
{"Student_ID": 5,
"Name":"Jake",
"ExamSubject": "English",
"Result": 84.15,
"ExamDate": "9/12/2020",
"Sex": "M"},
]
print(Student)
這是我到目前為止在 lambda function 上使用的代碼:
import json
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket = 'finalyearpro-aws'
key = 'StudentResults.json'
try:
data = s3.get_object(Bucket=bucket, Key=key)
json_data = data['Body'].read().decode('utf-8')
print (json_data)
except Exception as e:
raise e
我如何添加到此代碼以使其從 JSON 文件讀取“結果”,對其進行分析(最大值、最小值、平均值)並顯示在 Lambda 控制台上。
json.loads(json_data)
將解析 json 字符串並從中創建字典列表(用於此數據)。 之后,您可以遍歷列表並做任何您想做的事情,即
data = json.loads(json_data)
min([r['Result'] for r in data])
您可以使用boto3.resource('s3').Object(...).get()
加載文檔,然后使用json.loads()
將其解析為 python :
import json
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = 'finalyearpro-aws'
key = 'StudentResults.json'
obj = s3.Object(bucket, key)
data = obj.get()['Body'].read().decode('utf-8')
json_data = json.loads(data)
print(json_data)
boto3 已切換到新的資源格式(請參閱https://github.com/boto/boto3/issues/56 )。 如果您遇到錯誤'S3' object has no attribute 'Object'
,請嘗試以下操作:
import boto3
import json
s3 = boto3.resource('s3')
obj = s3.Bucket('bucket-name').Object('object-key')
jsonStr = obj.get()['Body'].read().decode('utf-8')
jsonObj = json.loads(jsonStr)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.