簡體   English   中英

從 S3 存儲桶解析 JSON 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM