这是我编写的代码,并且似乎获得了迄今为止最好的结果。我仍然遇到错误,但到目前为止我得到了最好的结果。
我需要从 .json 文件中读取三件事,即使用 Python 的 ID、名称和国家/地区。
import json
import boto3
s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('valid_cities')
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
print(bucket)
json_file_name = event['Records'][0]['s3']['object']['key']
print(json_file_name)
json_object = s3_client.get_object(Bucket=bucket,Key=json_file_name)
print(json_object)
file_reader = json_object['Body'].read().decode("utf-8")
print(file_reader)
jsonDict = json.loads(file_reader)
print(jsonDict)
table.put_item(Item={'id':{'N':id},'name':{'S':name},'country':{'S':country}})
我已经做到了这一点,它读取 S3 存储桶中的 json 文件,并对其进行处理。现在我遇到了一个错误,指出以下内容:
{
"errorMessage": "name 'name' is not defined",
"errorType": "NameError",
"requestId": "c2f72151-9591-4f35-909b-6b7876b4253a",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 28, in lambda_handler\n table.put_item(Item={'id':{'N':id},'name':{'S':name},'country':{'S':country}})\n"
]
这是 citylist.json 文件中的一段示例数据:
{
"city_list":[
{
"id": 6951112,
"name": "Somerset West",
"state": "",
"country": "ZA",
"coord": {
"lon": 18.821131,
"lat": -34.084011
}
},
{
"id": 3358975,
"name": "Yzerfontein",
"state": "",
"country": "ZA",
"coord": {
"lon": 18.16157,
"lat": -33.344379
}
}
]
}
就像 Anon Coward 建议的那样,但最后一行可以保持简单:
import json
import boto3
s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('valid_cities')
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
json_file_name = event['Records'][0]['s3']['object']['key']
json_object = s3_client.get_object(Bucket=bucket,Key=json_file_name)
jsonDict = json.load(json_object['Body'])
for city in jsonDict['city_list']:
table.put_item(Item={'id': city['id'],'name': city['name'],'country':city['country']})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句