Rapidjson将密钥值从一个文档对象分配到另一个文档对象

Rapidjson assign a value of key from one document object to other document object

本文关键字:对象 文档 一个 分配 另一个 密钥 Rapidjson      更新时间:2023-10-16

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

JSON 1:

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

JSON 2:

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

我只想替换> json 1 的" jval1key1 ",用" jval1key1 > JSON 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 '。'。

'。

根据Rapidjson文档,您可以使用CopyFrom进行DOM树的深层副本。另一个选择是将值交换与交换交换,如果速度是问题,则更快:

示例代码:

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

我认为您现在正在做的是将值从DOC2转移到DOC1。查看移动语义部分以获取更多信息,以查看是否可能导致您看到的错误。