空字符串验证异常-DynamoDB

FF5*_*nja 9 javascript csv amazon-web-services amazon-dynamodb

我已经在网上搜寻了如何解决此问题的方法,收效甚微。

我正在解析CSV,然后使用DynamoDB将数据放入表中。每当有空白条目时,我都会收到错误消息:

One or more parameter values were invalid: An AttributeValue may not contain an empty string
Run Code Online (Sandbox Code Playgroud)

例如:

Header: "Name","Age","Birth date"
Entry:  Brandon,22  <------ THROWS ERROR
Run Code Online (Sandbox Code Playgroud)

问题是,我永远不会知道CSV中是否有空格。但是即使有,我仍然需要解析它。

我试图将空字符串的值重新分配为“ N / A”之类的内容,以消除此错误,但无济于事。有什么建议么?

编辑:添加上下文的代码。

var file = process.argv[2];
console.log("File: " + file);

var csv = require("fast-csv");

csv.fromPath(file, {
        headers: true,
        ignoreEmpty: true
    })
    .on("data", function(data) {
        // Uncomment to see CSV data
        // console.log(data);

        params = {
            TableName: tableName,
            Item: {
                RefID: {
                    S: data["Ref-ID"]
                },
                //lots more items
            }
        };

        //Validation loops to make sure the items are defined
        for (var key in params.Item) {
            for (var items in params.Item[key]) {
                var value = params.Item[key][items];
                if (value === undefined || value === "") {
                    value = "N/A";
            }
        }

        dynamodb.putItem(params, function(err, info) {
            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)

Kha*_* T. 12

到目前为止,DynamoDB的DocumentClient中缺少对空字符串的支持仍然是一个限制。但是,您应该知道,自2017年7月以来,AWS开发工具包v2.7.16convertEmptyValues文档客户端添加了一个构造函数选项(称为),用于将空字符串,集合和二进制字符串转换为DynamoDB NULL类型的字段。

如果此客户端解决方法为您解决了问题,则需要将其设置为持久化到DynamoDB时true是否希望文档客户端将空值(0长度的字符串,二进制缓冲区和集合)转换为NULL类型。

像这样:

const AWS = require("aws-sdk");

const docClient = new AWS.DynamoDB.DocumentClient({
    convertEmptyValues: true
});
Run Code Online (Sandbox Code Playgroud)


Mar*_*k B 3

在代码中的任何地方都没有将姓名、年龄等值分配给 params 对象。您还没有显示所有代码吗?暂时忽略这一点并查看您的验证循环,您只是丢弃了“N/A”值。您需要修改params用于插入记录的实际对象。将验证循环更改为:

    //Validation loops to make sure the items are defined
    for (var key in params.Item) {
        for (var items in params.Item[key]) {
            var value = params.Item[key][items];
            if (value === undefined || value === "") {
                params.Item[key][items] = "N/A";
        }
    }
Run Code Online (Sandbox Code Playgroud)

当您从对象中获取值data并将其复制到params对象时,可能有一种更简单的方法来执行此操作,但您似乎没有显示该代码。