在 table 中导入 JSON 数据(DynamoDB、nodeJS)
Import JSON Data in table (DynamoDB, nodeJS)
我想使用以下代码将数据从我的 JSON 文件导入 DynamoDB:
var AWS = require("aws-sdk");
var fs = require('fs');
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
var docClient = new AWS.DynamoDB.DocumentClient();
console.log("Importing Pays into DynamoDB. Please wait.");
var allPays = JSON.parse(fs.readFileSync('paysdata.JSON', 'utf8'));
allPays.forEach(function(pays) {
var params = {
TableName: "Pays",
Item: {
"region": pays.region,
"name": pays.name,
"name.common": pays.name.common,
"languages": pays.languages,
"area": pays.area
}
};
docClient.put(params, function(err, data) {
if (err) {
console.error("Unable to add Pays", pays.name.common, ". Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("PutItem succeeded:", pays.name.common);
}
});
});
但我仍然得到这个错误
HERE
有谁知道如何解决这个问题?我尝试在网站上执行相同的步骤:
Create table using nodejs Dynamodb?
但是不行。
我的CreateTable.js
var AWS = require("aws-sdk");
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
var dynamodb = new AWS.DynamoDB();
var params = {
TableName : "Pays",
KeySchema: [
{ AttributeName: "region", KeyType: "HASH"}, //Partition key
{ AttributeName: "name", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "region", AttributeType: "S" },
{ AttributeName: "name", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
dynamodb.createTable(params, function(err, data) {
if (err) {
console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
}
});
一些数据:
[
{
"name": {
"common": "Aruba",
"official": "Aruba",
"native": {
"nld": {
"official": "Aruba",
"common": "Aruba"
},
"pap": {
"official": "Aruba",
"common": "Aruba"
}
}
},
"translations": {
"ces": {
"official": "Aruba",
"common": "Aruba"
},
"deu": {
"official": "Aruba",
"common": "Aruba"
},
"jpn": {
"official": "\u30a2\u30eb\u30d0",
"common": "\u30a2\u30eb\u30d0"
},
"kor": {
"official": "\uc544\ub8e8\ubc14",
"common": "\uc544\ub8e8\ubc14"
},
"name": {
"common": "Aruba",
"official": "Aruba",
"native": {
"nld": {
"official": "Aruba",
"common": "Aruba"
},
"pap": {
"official": "Aruba",
"common": "Aruba"
}
}
}
name
是一个对象,因此您不能将 pays.name
作为 name
的值,因为它是“字符串”数据类型。
要解决此问题,您可以将 table 定义更改为:
var params = {
TableName : "Pays",
KeySchema: [
{ AttributeName: "region", KeyType: "HASH"}, //Partition key
{ AttributeName: "name.common", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "region", AttributeType: "S" },
{ AttributeName: "name.common", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
我想使用以下代码将数据从我的 JSON 文件导入 DynamoDB:
var AWS = require("aws-sdk");
var fs = require('fs');
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
var docClient = new AWS.DynamoDB.DocumentClient();
console.log("Importing Pays into DynamoDB. Please wait.");
var allPays = JSON.parse(fs.readFileSync('paysdata.JSON', 'utf8'));
allPays.forEach(function(pays) {
var params = {
TableName: "Pays",
Item: {
"region": pays.region,
"name": pays.name,
"name.common": pays.name.common,
"languages": pays.languages,
"area": pays.area
}
};
docClient.put(params, function(err, data) {
if (err) {
console.error("Unable to add Pays", pays.name.common, ". Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("PutItem succeeded:", pays.name.common);
}
});
});
但我仍然得到这个错误 HERE 有谁知道如何解决这个问题?我尝试在网站上执行相同的步骤: Create table using nodejs Dynamodb?
但是不行。
我的CreateTable.js
var AWS = require("aws-sdk");
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
var dynamodb = new AWS.DynamoDB();
var params = {
TableName : "Pays",
KeySchema: [
{ AttributeName: "region", KeyType: "HASH"}, //Partition key
{ AttributeName: "name", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "region", AttributeType: "S" },
{ AttributeName: "name", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
dynamodb.createTable(params, function(err, data) {
if (err) {
console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
}
});
一些数据:
[
{
"name": {
"common": "Aruba",
"official": "Aruba",
"native": {
"nld": {
"official": "Aruba",
"common": "Aruba"
},
"pap": {
"official": "Aruba",
"common": "Aruba"
}
}
},
"translations": {
"ces": {
"official": "Aruba",
"common": "Aruba"
},
"deu": {
"official": "Aruba",
"common": "Aruba"
},
"jpn": {
"official": "\u30a2\u30eb\u30d0",
"common": "\u30a2\u30eb\u30d0"
},
"kor": {
"official": "\uc544\ub8e8\ubc14",
"common": "\uc544\ub8e8\ubc14"
},
"name": {
"common": "Aruba",
"official": "Aruba",
"native": {
"nld": {
"official": "Aruba",
"common": "Aruba"
},
"pap": {
"official": "Aruba",
"common": "Aruba"
}
}
}
name
是一个对象,因此您不能将 pays.name
作为 name
的值,因为它是“字符串”数据类型。
要解决此问题,您可以将 table 定义更改为:
var params = {
TableName : "Pays",
KeySchema: [
{ AttributeName: "region", KeyType: "HASH"}, //Partition key
{ AttributeName: "name.common", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "region", AttributeType: "S" },
{ AttributeName: "name.common", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};