【问题标题】:Put an item in Amazon DynamoDB with AWS SDK CPP using as input the item in JSON format使用 AWS 开发工具包 CPP 将项目放入 Amazon DynamoDB 中,使用 JSON 格式的项目作为输入
【发布时间】:2021-07-10 13:54:25
【问题描述】:

是否有任何简单的方法可以使用 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 字符串,但您可以遍历 JSON 的键,填充 AttributeValue,然后以某种通用的方式将其添加到 PutItemRequest。大概你真的想要/需要使用 C++,但如果没有,用其他语言有更简单的方法来做到这一点。

标签: amazon-web-services amazon-dynamodb aws-sdk-cpp


【解决方案1】:

如果 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2015-11-02
    • 2016-12-07
    • 2016-02-13
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多