0

对于所有熟悉 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 真的是这里的问题吗,从某种意义上说它可能正在改变对象?
除此以外,还有其他搜索会员的方法吗?
任何提示表示赞赏...

4

1 回答 1

1

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

rapidjson 有一个很好的例子来说明如何使用迭代器。

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

使用 rapidjson 检索 JSON 字符串中的嵌套对象

于 2014-10-02T21:06:20.083 回答