我试图用Python和Boto3将JSON文件加载到AWS dynamoDB中时遇到了问题,因为该文件具有子级别JSON。
例如,我有以下代码:
from __future__ import print_function # Python 2/3 compatibility
import boto3
dynamodb = boto3.resource('dynamodb', region_name='sa-east-1', aws_access_key_id='AWS ACCESS KEY', aws_secret_access_key='AWS SECRET KEY')
table = dynamodb.create_table(
TableName='Movies',
KeySchema=[
{
'AttributeName': 'year',
'KeyType': 'HASH' #Partition key
},
{
'AttributeName': 'title',
'KeyType': 'RANGE' #Sort key
}
],
AttributeDefinitions=[
{
'AttributeName': 'year',
'AttributeType': 'N'
},
{
'AttributeName': 'title',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 10,
'WriteCapacityUnits': 10
}
)
print("Table status:", table.table_status)
在这个布局中,我创建了一个表在AWS动态数据库,但只适用于JSON在一个层次的结构,如:
[
{
"year": 2013,
"title": "Rush"
}
]
但是,如果我想把一个JSON文件与子层?如何使用Boto3创建此表?以及如何输入文件?像这样:
[
{
"year": 2013,
"title": "Rush",
"info": {
"directors": ["Ron Howard"],
"release_date": "2013-09-02T00:00:00Z",
"rating": 8.3,
"genres": [
"Action",
"Biography",
"Drama",
"Sport"
],
"image_url": "http://ia.media-imdb.com/images/M/MV5BMTQyMDE0MTY0OV5BMl5BanBnXkFtZTcwMjI2OTI0OQ@@._V1_SX400_.jpg",
"plot": "A re-creation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda.",
"rank": 2,
"running_time_secs": 7380,
"actors": [
"Daniel Bruhl",
"Chris Hemsworth",
"Olivia Wilde"
]
}
}
]
我在网上阅读了这两个文档并搜索了一些教程,但我找不到如何做到这一点。这应该很简单,我知道我必须有办法做到这一点,但我还不能得到它。有人给我小费吗?
如果以这种方式加载,它将处理嵌套的JSON结构,当您读取它时,您可以解析JSON并读取JSON中所需的属性
import boto3
import json
dynamodbclient=boto3.resource('dynamodb')
sample_table = dynamodbclient.Table('ec2metadata')
with open('/samplepath/spotec2interruptionevent.json', 'r') as myfile:
data=myfile.read()
# parse file
obj = json.loads(data)
#instance_id and cluster_id is the Key in dynamodb table
response=sample_table.put_item(
Item={
'instance_id': instanceId,
'cluster_id': clusterId,
'event':obj
}
)
实际上,我犯了一个简单的概念错误。对于DynamoDB,在创建表时,不需要声明表的每个属性。在这个阶段,您只需要说谁将是分区键和排序键(如果有)。如果输入的项具有更多属性,则可以在put_item()函数上声明,如:
from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
dynamodb = boto3.resource('dynamodb', region_name='sa-east-1', aws_access_key_id='AWS ACCESS KEY', aws_secret_access_key='AWS SECRET KEY')
table = dynamodb.Table('Movies')
title = "The Big New Movie"
year = 2015
response = table.put_item(
Item={
'year': year,
'title': title,
'info': {
'plot':"Nothing happens at all.",
'rating': decimal.Decimal(0)
}
}
)
使用上面的示例,我认为您可以简单地使用table.update_item()方法。
key = {'year': '2013'},{'title': 'Rush'}
attribute_name = 'info'
attribute_value = {} # build your info as a dictionary
attribute_value['directors'] = ['Ron Howard']
...
response = table.update_item(
Key = key,
UpdateExpression="SET " + attribute_name + " = :val",
ExpressionAttributeValues={':val': attribute_value},
ReturnValues="UPDATED_NEW"
)
我在Amazon DynamoDB中有多个表,JSON数据当前使用AWS CLI中提供的命令上传到表中-这很好。 但是,我只想使用Python Boto3,但无法使用外部数据文件作为输入执行Boto请求。我设想如果有一个Boto3脚本,它会像下面所示的那样,但是我还没有找到它的文档/示例。 示例(伪代码) 参考:http://docs.aws.amazon.com/amazondynamodb/l
问题内容: 我想保留一个JSON文档来存储一些简单的数据,并且我需要此文档并在调用中使用JSON对象,以便可以使用它。这不是电话。我的意思是应该用于开发,但我确实希望在构建时编译文件,这与API 的实际调用不同,API的内容是动态的。 问题答案: 最简单的方法是为此使用requirejs json插件,这将使您也可以将文件包括在构建中。 https://github.com/millermedei
问题内容: 我正在使用JSON传输数据。 我需要在HTML页面中使用Ajax读取仅在脚本中包含一个JSON对象的文件吗? 我是否也需要jQuery,或者是否可以使用Ajax加载该JSON文件? 在不同的浏览器上是否有所不同? 问题答案: 您不需要任何库,香草javascript中的所有内容均可用,以获取json文件并进行解析:
我想加载(要求)一个包含json模式的文件夹,这些模式具有基于其文件的引用。 换句话说,我有 并在同一文件夹中的另一个文件中: 这些模式在sperate文件中,现在应该加载到JS中,以便针对json对象进行验证。但是,文件夹内的引用应该仍然有效。 这就是为什么我的问题是,是否以及如何能够加载一个装满json文件的文件夹,而不需要中断引用。 这个库将使用这些模式来验证json对象:https://g
我想加载一个文件从hdfs到我的本地服务器使用puty,然后重命名,并再次加载回hdfs。我怎么能这样做呢?我需要它的Unix命令。任何帮助将不胜感激。
努力将json从URL上的文件(myData.json)加载到对象中,以便访问属性值。 --数据立即加载,我在应用程序中非常需要它。 -我将访问整个应用程序中的数据,而不仅仅是数据加载后立即发生的一个函数的一部分。 --我已确保文件中的数据格式正确。 按照jQuery API上的示例,我不应该做一些简单的事情,比如: 警报(jqxhr.my财产); 得到价值吗?我错过了哪一步?我试过做评估和其他类