我正在解析一个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)
我仍然有错误,但现在可以正确显示表格了。
此时的dyneDB似乎不允许空字符串。我不明白为什么,但到目前为止,您不能不存储"Key"的属性:"。
请向亚马逊投诉。key="和key=null是非常不同的用例,是必需的。
尝试对param.Item
对象进行字段验证,以验证所有设置是否正确;并找到困扰您的控制台的errornous字段。
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!")
}
}
}