属性不能包含空字符串

FF5*_*nja 6 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");
    });
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在将任何可能的空字符串转换为== N/A,以解决此问题。有什么想法吗?

编辑:

原来是undefined应该显示其在表中的内容。

console.log("Added item:", JSON.stringify(data[key], null, 2));
Run Code Online (Sandbox Code Playgroud)

编辑2:更改此代码...

dynamodb.putItem(params, function(err, data)
Run Code Online (Sandbox Code Playgroud)

...对此:

dynamodb.putItem(params, function(err, info)
Run Code Online (Sandbox Code Playgroud)

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

小智 5

看来 dynamoDB 此时不允许空字符串。我不明白为什么,但截至目前,您不能不存储“Key”:“”的属性。

请向亚马逊投诉。key="" 和 key=null 是非常不同的用例,需要使用。


jac*_*cob 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!")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)