gpt4 book ai didi

c++ - 在rapidjson中解析数组内的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:30 35 4
gpt4 key购买 nike

我在实现递归函数时遇到问题,该函数遍历我从解析 json 输入中获得的树。

json 输入。例如:

{
"attr" : { "a": 1, "ovec": [ { "b": 2, "c": 3 }, { "d": 4} ] }
}

这就是我们所说的“属性的复合值”,该值只是一个 JSON 文档。它的内容是完全任意的(只要它的 JSON 有效)。

问题是,对于 Vector,我必须使用 Value::ConstValueIterator 类型进行循环(与 Object 不同,我在其中使用 Value::ConstMemberIterator)。

我的递归函数将 Value::ConstMemberIterator 作为参数,一切正常,直到我在 Vector 中遇到 Vector/Object - 对于递归调用,我需要一个 Value::ConstMemberIterator 类型的迭代器。

“遍历”函数的相关部分:

int parseContextAttributeCompoundValue
(
const Value::ConstMemberIterator& node
)
{
std::string type = jsonParseTypeNames[node->value.GetType()];
if (type == "Array")
{
for (Value::ConstValueIterator iter = node->value.Begin(); iter != node->value.End(); ++iter)
{
std::string nodeType = jsonParseTypeNames[iter->value.GetType()];
if (nodeType == "String")
{
val = iter->GetString();
}
// else if ...
if ((nodeType == "Object") || (nodeType == "Array"))
{
// Here's my problem - need to convert 'iter' to Value::ConstMemberIterator
// in order to recursively call parseContextAttributeCompoundValue for this object/array
parseContextAttributeCompoundValue(iter); // COMPILATION ERROR
}
}
}
else if (type == "Object")
{
for (Value::ConstMemberIterator iter = node->value.MemberBegin(); iter != node->value.MemberEnd(); ++iter)
{
std::string nodeType = jsonParseTypeNames[iter->value.GetType()];
if (nodeType == "String")
{
val = iter->value.GetString();
}
else if (nodeType == "Number")
{

if ((nodeType == "Object") || (nodeType == "Array"))
{
// Here I'm just fine as iter is of the desired type already
parseContextAttributeCompoundValue(iter);
}
}
}
}

我尝试了一些方法,比如调用 iter->value.MemberBegin() 以“转换”为所需的类型,但到目前为止没有任何成功

非常感谢这里的一些帮助......

最佳答案

您可以简单地调用具有Value 类型的函数,而不是传递迭代器:

void parseContextAttributeCompoundValue(const Value& v) {
if (v.IsObject()) {
// ...
}
else if (v.IsArray() {
// ...
}
}

然后从调用站点:

for (Value::ConstValueIterator iter = ...) {
parseContextAttributeCompoundValue(*iter);
}

for (Value::ConstMemberIterator iter = ...) {
parseContextAttributeCompoundValue(iter->value);
}

关于c++ - 在rapidjson中解析数组内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31383852/

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