如何使用batch-write-item向DynamoDB写入Map/List类型JSON并解决报错?
DynamoDB batch-write-item JSON格式错误排查
核心原因:两个报错均是未遵循DynamoDB原生JSON格式规范导致的,所有属性值必须显式声明数据类型标记,复杂类型(Map/List)也需要先标注类型再嵌套内容。
1. Map类型JSON错误说明
- 错误点:
ToolOne、ToolTwo作为Map类型属性,没有先声明"M"类型标记,直接把Map内的键写在了属性层级,DynamoDB将item、qty、desc识别为未知的类型标记,触发校验报错。 - 正确格式要求:Map类型属性的结构为
"属性名": {"M": {Map内部的键值对}}
2. List类型JSON错误说明
- 错误点:
ToolOne、ToolTwo作为List类型属性,没有先声明"L"类型标记,直接把数组写在了属性值位置,DynamoDB期望属性值是包含类型标记的字典对象,收到列表后触发类型不匹配报错。 - 正确格式要求:List类型属性的结构为
"属性名": {"L": [列表内部的元素]}
修正后的完整JSON示例
修正后的Map版本JSON
{ "TestDB":[ { "PutRequest":{ "Item":{ "Name":{"S": "UserName"}, "ToolOne":{ "M": { "item":{"S": "excel"}, "qty":{"N": "2"}, "desc":{"S": "eeee"} } }, "ToolTwo":{ "M": { "item":{"S": "Word"}, "qty":{"N": "1"}, "desc":{"S": "www"} } } } } } ] }
修正后的List版本JSON
{ "TestDB":[ { "PutRequest":{ "Item":{ "Name":{"S": "userName"}, "ToolOne":{ "L": [ {"S": "excel"}, {"N": "2"}, {"S": "eeee"} ] }, "ToolTwo":{ "L": [ {"S": "Word"}, {"N": "1"}, {"S": "www"} ] } } } } ] }
修改完成后直接执行原命令即可正常写入:
aws dynamodb batch-write-item --request-items file://Json_file_name.json
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

