我正在解析CSV文件并将数据放入AWS DynamoDB的表中。
现在看来,我收到以下错误:
One or more parameter values were invalid: An AttributeValue may not contain an empty string
...在将数据放入表格之前。数据已经到了桌面,但在此之前没有向我发送一百万次该错误。
我的代码:
var csv = require("fast-csv");
csv.fromPath(file, {
headers: true,
ignoreEmpty: true
})
.on("data", function(data) {
for (var key in data) {
if (data.hasOwnProperty(key)) {
if (data[key] === "" || data[key] === undefined || data[key] === null) {
data[key] = "N/A";
}
}
params = {
TableName: tableName,
Item: {
RefID: {
S: data["Ref-ID"]
},
//lots of other data
}
};
dynamodb.putItem(params, function(err, data) {
if (err) {
console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
}
else {
console.log("Added item:", JSON.stringify(data, null, 2));
}
});
}
})
.on("end", function() {
console.log("done");
});
正如您所看到的,我正在将任何可能的空字符串转换为== N/A
以尝试解决此问题。有什么想法吗?
编辑:
当它显示它放在表格中的内容时,结果为undefined
。
console.log("Added item:", JSON.stringify(data[key], null, 2));
编辑2:更改了此代码......
dynamodb.putItem(params, function(err, data)
......对此:
dynamodb.putItem(params, function(err, info)
我仍然收到错误,但现在正确显示表格。
答案 0 :(得分:3)
尝试对param.Item
对象进行字段验证,以验证是否已正确设置所有内容;并找到困扰你的控制台的错误字段。
var tableName = "wombat_habitats";
var data = {
"Ref-ID": "Charlie"
};
params = {
TableName: tableName,
Item: {
RefID: {
S: data["Ref-ID"]
},
SomethingElse: {
S: data["Bad-Key"]
}
//lots of other data
}
};
for(var itemKey in params.Item) {
for(var itemAttr in params.Item[itemKey]) {
var value = params.Item[itemKey][itemAttr];
if(value === undefined || value === "") {
console.log("item", itemKey, "of type", itemAttr, "is undefined!")
}
}
}
答案 1 :(得分:2)
此时似乎dynamoDB不允许空字符串。我无法理解为什么,但截至此日期,您无法存储" Key":""。
的属性请向亚马逊投诉。键=""和key = null是非常不同的用例,是必需的。