将嵌套对象添加到RapidJSON

时间:2018-09-06 21:22:36

标签: rapidjson

我正在尝试编写一个实用程序,将对象添加到现有的JSON文档中。

我并不真正了解或真正在乎输入是什么-我认为它可能是字符串的向量,本质上是我通过嵌套对象名称的“路径”-示例“ level1 / level2 / level3”将产生像这样:

{
    "level1": {
        "level2": {
            "level3": {
            }
        }
    }
}

,并且在任何级别上都可能存在键/值对。我已经编写了一个代码来循环执行此操作,但是在保留对JSON文档的更改方面存在一些问题。

这是我的示例代码(doc_m是我的类中的成员变量-输入Document):

void addToJson(vector<const char*> pathVec, const char* key, const string& value)
{
    auto& a = doc_m.GetAllocator();
    Value& val = doc_m;

    // For each string in the pathVec, add it to the JSON if it's not
    // already present
    for (unsigned int i = 0; i < pathVec.size(); i++)
    {
        if (!val.HasMember(pathVec[i]))
        {
            Value newVal(kObjectType);
            val.AddMember(Value(pathVec[i], a), newVal, a);
        }

        // Now continue to the next level in
        val = val[pathVec[i]];
    }

    if (val.HasMember(key))
    {
        val[key].SetString(value.c_str(), a);
    }
    else
    {
        val.AddMember(Value(key, a), Value(value.c_str(), a), a);
    }
}

我非常确定,因为“ =”运算符被Value重载,所以这是行不通的原因,但是我无法弄清楚该怎么做

0 个答案:

没有答案