Javascript 空字符串验证异常-DynamoDB
我在互联网上搜索了一下如何解决这个问题,但收效甚微 我正在解析CSV,并使用DynamoDB将数据放入表中。 只要有空白条目,我就会收到错误:Javascript 空字符串验证异常-DynamoDB,javascript,csv,amazon-web-services,amazon-dynamodb,Javascript,Csv,Amazon Web Services,Amazon Dynamodb,我在互联网上搜索了一下如何解决这个问题,但收效甚微 我正在解析CSV,并使用DynamoDB将数据放入表中。 只要有空白条目,我就会收到错误: One or more parameter values were invalid: An AttributeValue may not contain an empty string 例如: Header: "Name","Age","Birth date" Entry: Brandon,22 <------ THROWS ERROR 您
One or more parameter values were invalid: An AttributeValue may not contain an empty string
例如:
Header: "Name","Age","Birth date"
Entry: Brandon,22 <------ THROWS ERROR
您的代码中没有任何地方将name、age等值指定给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";
}
}
可能有一种更简单的方法可以做到这一点,因为您正在从
数据中获取值,并将其复制到参数
对象中,但您似乎没有显示该代码。这些函数工作起来很有魅力,只需在对象上执行storageSerialize,然后再存储,并在获取项目时执行storageDeserialize
您可能希望使对象处于与输入中相同的状态
注意:上面的代码是用Typescript编写的,但是您可以很容易地修改它
private storageSerialize(data: any) {
Object.keys(data).forEach(function (key) {
let val = data[key];
if (val == null) {
data[key] = "PLACEHOLDER_NULL"
}
if (val == "") {
data[key] = "PLACEHOLDER_EMPTYSTRING"
}
});
return data;
}
private storageDeserialize(data: any) {
if (data !== undefined) {
Object.keys(data).forEach(function (key) {
let val = data[key];
if (val == "PLACEHOLDER_NULL") {
data[key] = null
}
if (val == "PLACEHOLDER_EMPTYSTRING") {
data[key] = ""
}
});
}
return data;
}
到目前为止,DynamoDB的DocumentClient中缺少对空字符串的支持仍然是一个限制。但是,您应该知道,自2017年7月以来,AWS SDK为将空字符串、集合和二进制字符串转换为DynamoDBNULL
类型字段添加了一个构造函数选项(称为convertEmptyValues
)
如果此客户端解决方案适合您,则如果希望文档客户端在持久化到DynamoDB时将空值(0长度字符串、二进制缓冲区和集合)转换为NULL
类型,则需要将其设置为true
大概是这样的:
const AWS = require("aws-sdk");
const docClient = new AWS.DynamoDB.DocumentClient({
convertEmptyValues: true
});
或者您可以传递nullify_invalid new封送拆收器(['nullify_invalid'=>true]) 2020年5月18日更新:
DynamoDB现在支持非键属性的空字符串值:
在写入DynamoDB时,您不应该再看到此异常。我尝试将空字符串的值重新分配给类似“N/A”的值,试图破坏此错误,但没有效果代码>也许您需要显示您的代码,因为这样应该可以正常工作。另外,如果字符串为null,您可以完全从Put命令中删除该属性。诚然,问题是相似的,但我有许多不同的问题,我通过最后一个问题解决了。问题是我的主要问题是如何避开这个特定的错误,这个问题一直没有得到回答。我觉得这篇文章比我上一篇(有很多问题)更简洁、更清晰。你需要展示更多的代码。分配了某个值后,您对该值做了什么?看起来您只是在循环遍历这些值,将每个值分配给value
,然后将其扔掉……而且这看起来与您之前提出的问题完全相同,这是一个关于如何处理相同错误消息的问题。如果你还没有真正的答案,你就不应该把最后一个问题标记为已回答。我的印象是,如果有人帮你解决问题或给你最好的答案,你会给他们打勾。虽然我的问题还没有完全解决,但他帮助我解决了代码中的其他问题,让我更好地理解了正在发生的事情。如果我错了,我不会让它再次发生。好的,错误消失了,数据正在做我需要的事情。谢谢你的帮助,如果我误用了这个网站,我向你道歉。下一次我会更加有意。截至2020年6月,DynamoDB现在支持非关键属性的空字符串值:@Aaron_H:如果我读对了公告,这只适用于Amazon DynamoDB local(即可下载版本的DynamoDB),而不适用于DynamoDB web服务。
const AWS = require("aws-sdk");
const docClient = new AWS.DynamoDB.DocumentClient({
convertEmptyValues: true
});