如何使用RapidJSON通过将其修改为其他模式来修改JSON数据

时间:2019-05-15 19:53:30

标签: c++ rapidjson

我必须使用RapidJson将JSON数据修改为其他模式。我可以修改Value对象的名称和值,但找不到正确的示例,因此可以通过重新排列节点来修改JSON。

我尝试过通过创建一个新文档并添加从另一个文档中获取的值,但是它不起作用的方式。

    rapidjson::Document doc1, doc2;
            rapidjson::Document::AllocatorType& alloc = doc1.GetAllocator();
            doc1.Parse(str); // str contains the JSON data

            Value statusObj(doc1["status"], alloc);
            Value resultsObj(doc1["area_data"]["update_results"], alloc);

            doc2.SetObject();
            doc2.AddMember("status", statusObj, alloc);
            doc2.AddMember("results", resultsObj, alloc);

//doc1 - This is the inout JSON
{
    "status": {},
    "area_data":
    {
        ""
        "update_results":[]
    }
}

//doc2 - This is what am trying to create
{
    "status": {},
    "results":[]    //update_results from doc 1
}

1 个答案:

答案 0 :(得分:0)

找到了一种方法。可行!

            rapidjson::Document doc, newDoc;
            rapidjson::Document::AllocatorType& alloc = doc.GetAllocator();
            doc.Parse(str); // str contains the JSON data

            Value& results = doc["area_data"]["update_results"];

            Value newResults(kArrayType);

            newResults.CopyFrom(results, alloc);

            doc.AddMember("results", newResults, alloc);
            doc.RemoveMember("area_data");