解析序列/映射节点时出现无效的 yaml 节点错误
Invalid yaml node error while parsing sequence/map node
我完全知道yaml规范的重复键问题:
映射节点的内容是一组无序的键:值节点对,限制是每个键都是唯一的。
例如,我使用 yaml-cpp 库发出了一个 yaml 文件,其中包含嵌套树结构,如下所示:
work:
- run:
type: workout
figures:
start_time:
start: 9
end_time:
end: 12
- run:
type: workout
figures:
start_time:
start: 16
end_time:
end: 18
显然,它有重复的键,yaml验证器将其视为普通文件。但是当我尝试使用 yaml-cpp 解析它时
void parser(const std::string& path)
{
const YAML::Node& baseNode = YAML::Loadfile(path);
for (const auto& item : baseNode["work"]);
{
switch (item.second.Type()) //Error not a valid yaml node
{
//If it is a NullNode
case YAML::NodeType::Null:
break;
//If it is a ScalarNode
case YAML::NodeType::Scalar:
scalarNodeIterator(item.second, item.first.as<std::string>());
break;
//If it is a SequenceNode
case YAML::NodeType::Sequence:
sequenceNodeIterator(item.second, item.first.as<std::string>());
break;
//If it is a MapNode
case YAML::NodeType::Map:
mapNodeIterator(item.second, item.first.as<std::string>());
break;
}
}
}
我想要什么:
如您所见,我有自己的节点依赖迭代器来读取任何类型的yaml树。我需要使用重复的键,当我这样做时,解析器应该按预期工作。
是否有可能实现一个可以读取像run
这样的节点的解析器?如果是,我该如何实现?如果没有,还有其他解决方案可以发出具有可读重复键的yaml文件吗?
您的示例没有重复的键,正如@tinita注释中指出的那样。
相反,在"work"键下,你有一个地图列表,每个地图都有键"run"和值一个地图。
这就是您收到错误的原因。迭代时
for (const auto& item : baseNode["work"])
item
将表示一个节点(因为您正在循环访问序列(,而不是键/值对。然后,您必须遍历其(一个(元素以读取键/值对。
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 为什么我的删除节点函数实际上没有删除节点?
- 我们可以删除链表中静态内存中的节点吗
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 解析序列/映射节点时出现无效的 yaml 节点错误
- 在没有参数列表的情况下无效使用模板名称"节点"
- 添加新节点后,链接列表的负责人总是无效
- 包含具有无效位置的节点引用的方式
- 二进制树中的节点为无效
- XML从UnicodeString创建CData节点时出现无效字符
- 删除节点无效
- 获取类型的错误 无效使用不完整类型的"结构节点"