gpt4 book ai didi

c++ - 如何使用 Casablanca 在现有的 web::json::value 对象中附加新的键值对?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:43 26 4
gpt4 key购买 nike

我正在使用 Casablanca C++ REST 库来处理 JSON 数据。这是我用来从头开始创建新 JSON 对象并添加键值对的代码。

web::json::value temp;

// 1 - to add literal key-value pairs
temp[L"key1"] = web::json::value::string(U("value1"));

// 2 - to add key-value pairs of variables whose values I don't know, and are passed as std::string
temp[utility::conversions::to_string_t(key2)] = web::json::value::string(utility::conversions::to_string_t(value2));

这工作得很好,我可以在新对象上使用它,并根据需要添加尽可能多的键值对。

我的问题是我需要将这些键附加到现有的 web::json::value 对象,而不是从头开始创建一个新的。我不知道现有对象的结构,因此代码将不得不更新与键对应的值(如果它存在),或者添加一个新的键值对(如果它不存在)。

当我尝试相同的代码时,除了我使用此行将 temp 分配给某个现有值:

web::json::value temp = m_value; //m_value is an existing object

当我尝试使用运算符 [] 访问 temp 时,我得到了一个 json::exception(使用两个中的任何一个)我在上面使用的方法)。

我怎样才能达到我的需要?我在 SO 上进行了搜索,但没有找到针对我的问题的卡萨布兰卡特定答案。

最佳答案

我找到了适合我的解决方法,但我不认为这是一个好方法。等待其他答案,但这可能会帮助那些解决这个问题的人。

解决方法是创建一个新对象并添加新的键值对,然后遍历旧对象并一一添加所有键。这可能有相当糟糕的表现。

web::json::value temp;
temp[key] = web::json::value::string(newvalue); // key and newvalue are of type utility::string_t

// m_value is the web::json::value which currently holds data
for (auto iter = m_value.as_object().cbegin(); iter != m_value.as_object().cend(); ++iter)
{
const std::string jsonKey = utility::conversions::to_utf8string(iter->first);
const web::json::value &jsonVal = iter->second;
temp[utility::conversions::to_string_t(jsonKey)] = jsonVal;
}

m_value = temp;

关于c++ - 如何使用 Casablanca 在现有的 web::json::value 对象中附加新的键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com