对于所有熟悉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/