【问题标题】:Rapidjson assign a value of key from one document object to other document objectRapidjson 将一个文档对象的键值分配给另一个文档对象
【发布时间】:2018-04-04 07:27:13
【问题描述】:

我有两个由 Rapidjson 库解析的 json 字符串。

Json 1:

{
  "jKey1":{
           "jVal1Key1":{
                         "mystr":["str1","str2"]
                       },
           "jVal2Key2":["data1","data2"]
          },
  "jKey2":"Title"
}

Json 2:

{
    "jVal1Key1":{
                  "mystr":["str1","str2"]
                }
}

我只想将 Json 1 的“jVal1Key1”替换为 的“jVal1Key1Json 2.

所以我尝试了以下代码。

Document doc1;
doc1.Parse<0>(json1.c_str()).HasParseError();
doc1.Parse(json1.c_str());

Document doc2;
doc2.Parse<0>(json2.c_str()).HasParseError();
doc2.Parse(json2.c_str());

if(doc1.HasMember("jKey1"))
{
    if(doc1["jKey1"].HasMember("jVal1Key1"))
    {
        if(doc2.HasMember("jVal1Key1"))
        {
           doc1["jKey1"]["jVal1Key1"] = doc2["jVal1Key1"];  // I failed here
        }
    }  
}

在我的程序中,下面这一行,

doc1["jKey1"]["jVal1Key1"] = doc2["jVal1Key1"];  // I failed here

编译成功。但它在运行时失败。我的问题是,如何将 'doc2' 的键 'jVal1Key1' 的值复制到 'doc1'。

【问题讨论】:

  • 能否添加运行时遇到的错误?
  • 我通过 std::runtime_error& 抓住了它。但它没有抛出任何错误。

标签: c++ json c++11 rapidjson


【解决方案1】:

根据RapidJson Documentation,你可以用CopyFrom做一个DOM Tree的深拷贝。另一种选择是用Swap 交换值,如果速度有问题,这会更快:

示例代码:

doc1["jKey1"]["jVal1Key1"].CopyFrom(doc2["jVal1Key1"], doc2.GetAllocator());

我认为您现在正在做的是将值从 doc2 移动到 doc1。查看Move Semantics 部分了解更多信息,看看这是否会导致您看到的错误。

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 2016-06-24
    • 2011-12-24
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2017-05-06
    相关资源
    最近更新 更多