我有两个由 Rapidjson 库解析的 json 字符串。
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 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/