c++ - Rapidjson 将一个文档对象的键值分配给另一个文档对象

标签 c++ json c++11 rapidjson

我有两个由 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”。

最佳答案

根据RapidJson Documentation ,您可以使用 CopyFrom 对 DOM 树进行深度复制。另一种选择是将值与 Swap 交换如果速度有问题,哪个更快:

示例代码:

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

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

关于c++ - Rapidjson 将一个文档对象的键值分配给另一个文档对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49645143/

相关文章:

c++ - 多线程应用程序中的显示任务必须使用原子锁或互斥锁吗?

c++ - 为什么 std::string::append() 不如 std::string::operator+() 强大?

javascript - 如何在 JavaScript 中创建动态 json 对象

javascript - 读取 JSON 并写入 HTML 表

c++ - "auto"变成了错误的类型?

c++ - 命名空间中常量结构、类和数组的初始化

c++ - 如何实现具有不同签名的虚函数?

c++ - gcc 使用专门的定义内联通用模板函数

c++ - 将 DriverVersion 转换为人类可读格式

php - json.stringify 转换为数组 php 不插入 mysql