属性可能不包含空字符串

时间:2016-08-03 18:29:19

标签: javascript csv amazon-web-services amazon-dynamodb

我正在解析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)

我仍然收到错误,但现在正确显示表格。

2 个答案:

答案 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是非常不同的用例,是必需的。