C++ 从Rapidjson值转换为Rapidjson文档

C++ 从Rapidjson值转换为Rapidjson文档,c++,json,rapidjson,C++,Json,Rapidjson,根据: 每个JSON值都存储在一个名为value的类型中。表示DOM的文档包含DOM树的根值 如果是这样,应该可以从文档生成子文档 如果我的JSON是: { "mydict": { "inner dict": { "val": 1, "val2": 2 } } } 我希望能够从内部字典创建文档 (然后在常见问题解答中了解如何将文档节点插入另一个文档?如果原始文档包含: { "mydict":

根据:

每个JSON值都存储在一个名为value的类型中。表示DOM的文档包含DOM树的根值

如果是这样,应该可以从文档生成子文档

如果我的JSON是:

{
    "mydict": {
        "inner dict": {
            "val": 1,
            "val2": 2
        }
    }
}
我希望能够从内部字典创建文档


(然后在常见问题解答中了解如何将文档节点插入另一个文档?

如果原始文档包含:

{
    "mydict": {
        "inner dict": {
            "val": 1,
            "val2": 2
        }
    }
}
您可以复制子文档:

const char json[] = "{\"mydict\": {\"inner dict\": {\"val\": 1, \"val2\": 2}}}";
Document doc, sub; // Null
doc.Parse(json);
sub.CopyFrom(doc["mydict"], doc.GetAllocator());
您还可以将子文档与其他文档交换:

const char json[] = "{\"mydict\": {\"inner dict\": {\"val\": 1, \"val2\": 2}}}";
Document doc, sub; // Null
doc.Parse(json);
sub.Swap(doc["mydict"]);
经过一些验证:

const char json[] = "{\"mydict\": {\"inner dict\": {\"val\": 1, \"val2\": 2}}}";
Document doc, sub; // Null
doc.Parse(json);
if (doc.IsObject()) {
    auto it = doc.FindMember("mydict");
    if (it != doc.MemberEnd() && it->value.IsObject()) {
        sub.Swap(it->value);
    }
}
每一项都将导致
sub
包含:

{
    "inner dict": {
        "val": 1,
        "val2": 2
    }
}
使用
CopyFrom()
方法,
doc
将包含:

{
    "mydict": {
        "inner dict": {
            "val": 1,
            "val2": 2
        }
    }
}
使用
Swap()


我认为这样做是不可能的,但是为什么要这样做呢?我希望能够以复数形式递归地将一些复数值插入到非根位置。根的分配器不适合用于在非根位置添加内容,只有文档具有GetAllocator.ya,但您可以在rapidjson迭代器和值中使用该分配器
{
    "mydict": null
}