【问题标题】:How to append new key-value pairs in an existing web::json::value object using Casablanca?如何使用 Casablanca 在现有的 web::json::value 对象中附加新的键值对?
【发布时间】:2016-12-22 10:58:55
【问题描述】:

我正在使用 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 上进行了搜索,但没有找到针对我的问题的卡萨布兰卡特定答案。

【问题讨论】:

    标签: c++ json casablanca


    【解决方案1】:

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

    解决方法是创建一个新对象并添加新的键值对,然后遍历旧对象并一一添加所有键。这可能性能很差。

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多