gpt4 book ai didi

c++ - HasMember 期间的 Rapidjson 断言

转载 作者:行者123 更新时间:2023-11-28 06:39:52 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com