对于所有熟悉Rapidjson的人来说,我都有以下问题:
我有一个确定的函数,它接受一个日期作为参数,如果该日期存在于json文件中,则该方法执行一些操作,如果不执行其他操作。
通常看起来像这样:(不是实际的代码,更像是伪代码)

功能:

void updateData(string date) {
    //
    //code to turn date from string to const char* (tested)
    //
    if (v.HasMember(date)) { //v is a value
        Value d;
        d=v[date];
        //
        //code that involves getting data from d (d is object) using HasMember
        //
    } else {
        //generic code that has nothing to do with json
    }


JSON文件:

{
    "main": {
        "v": {
           "2014-10-02" : {
                //some fields
           },
           "2014-10-03" : {
                //some fields
           }
         }
     }
}


因此,我第一次为日期“ 2014-10-02”调用updateData时,它将正确运行(执行if部分)。
问题是,当我为另一个日期调用updateData时(如“ 2014-10-03”应该可以正常工作),它总是执行错误的部分(其他部分),即使当我切换回第一个日期时,它仍然执行其他部分。 (同时弹出许多断言(主要是isString()))。
那么,从某种意义上说,HasMember真的是问题所在吗?
除此之外,是否还有其他搜索成员的方法?
任何提示都表示赞赏...

最佳答案

没有实际的代码很难说,但我认为问题可能是您将“ v”视为值而不是对象。 “ v”不是值,它是对象的名称。因此,您拥有的是一个嵌套对象。为此,我认为您必须使用MemberIterators并遍历v对象中的子对象。

Rapidjson有一个很好的有关如何使用迭代器的示例。

这里也有这个问题,它对如何使用嵌套对象有很好的回答

Retrieving a nested object inside a JSON string using rapidjson

关于c++ - HasMember期间的Rapidjson断言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26166013/

10-10 13:45