问题描述
是否有任何简单的方法可以使用 AWS SDK CPP 将项目放入 Amazon DynamoDB 中,并使用 JSON 格式的项目作为输入?类似的东西
Aws::DynamoDB::Model::PutItemRequest request;
request.SetTableName(table);
request.FunctionThatSetsAllAttributesParsingAJsonString(json_string);
还是总是需要设置每个属性及其类型?
Aws::DynamoDB::Model::PutItemRequest request;
request.SetTableName(table);
Aws::DynamoDB::Model::AttributeValue val1;
val1.SetS(str);
request.AddItem(key,val1);
Aws::DynamoDB::Model::AttributeValue val2;
...
解决方法
如果 JSON 对象遵循 Amazon DynamoDB JSON 格式,您可以轻松将其转换为 Aws::Map<:string aws:: dynamodb::model::attributevalue> 对象。例如,对于 Jsoncpp Json::Value 对象:
Aws::Map<Aws::String,Aws::DynamoDB::Model::AttributeValue> json2atts(const Json::Value& json) {
try {
Aws::Map<Aws::String,Aws::DynamoDB::Model::AttributeValue> amap;
Aws::Utils::Json::JsonValue jval(Json::FastWriter().write(json));
if (!jval.WasParseSuccessful()) {
throw exception("Failed to parse input JSON");
};
Aws::Utils::Json::JsonView jview = jval.View();
Aws::Map<Aws::String,Aws::Utils::Json::JsonView> jmap = jview.GetAllObjects();
for(auto& i : jmap) {
amap[i.first] = i.second.AsObject();
};
return amap;
}
catch (std::exception &e) {
...
};
};
然后,放置 Aws::Map<:string aws::dynamodb::model::attributevalue> 对象:
Aws::DynamoDB::Model::PutItemRequest request;
request.SetTableName(table);
request.SetItem(amap);