从Rapidjson Value转换为Rapidjson Document

时间:2017-07-03 08:46:17

标签: c++ json rapidjson

根据the tutorial

  

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

如果是这样,应该可以从文档中制作子文档。

如果我的JSON是:

{
    "mydict": {
        "inner dict": {
            "val": 1,
            "val2": 2
        }
    }
}

我希望能够从内部词典创建一个文档。

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

1 个答案:

答案 0 :(得分:0)

鉴于原始文件包含:

{
    "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()

{
    "mydict": null
}