使用 JSON 格式的输入作为输入,使用 AWS SDK CPP 将项目放入 Amazon DynamoDB

Put an item in Amazon DynamoDB with AWS SDK CPP using as input the item in JSON format

有什么简单的方法可以使用 AWS SDK CPP 将项目放入 Amazon DynamoDB 并使用 [=17] 中的项目作为输入=]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 对象遵循 A​​mazon DynamoDB JSON 格式,您可以轻松地将其转换为A​​ws::Map 对象。例如,对于 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) { 
       ...
    };
};

然后,放置 A​​ws::Map 对象:

Aws::DynamoDB::Model::PutItemRequest request;
request.SetTableName(table);
request.SetItem(amap);