使用YAML -CPP新API - 已修复的YAML文件解决
Parsing yaml file using yaml-cpp new API - Issue Fixed
我正在使用yaml-cpp 0.6最新解析yaml文件。
我的yaml文件看起来像这样,
-person: p1
obj:
name: x
age: 27
-person: p2
obj:
name: y
age:38
我的代码,
#include <iostream>
#include <yaml-cpp/yaml.h>
using namespace std;
int main()
{
YAML::Node config = YAML::LoadFile("config.yaml");
if(config.IsNull())
{
cout << "return";
}
cout << "size: " << config.size() << endl;
for(YAML::iterator it = config.begin(); it != config.end(); ++it)
{
YAML::Node node = *it;
cout << "node size: " << node.size() << endl;
//for(YAML::iterator it2 = node.begin(); it2!=node.end(); ++it2) {}
//iterating over node throws seg fault
cout << node << endl;
cout << "-----" << endl;
}
return 0;
}
我看到的o/p是
return
size: 2
node size: 2
node size: 2
obj:
name: x
age: 27
person: p1
2
-----
person: p2
obj:
age: 38
name: y
请帮助我理解为什么根节点,配置在我的情况下是无效的,尽管它的大小返回2。另外,如果config虽然null是算是的,那么为什么不节点呢?迭代节点抛出seg故障,因此发表了评论。如何迭代节点以列出我的情况并阅读每个人的属性?如何获得名称,年龄..使用节点[" person"] [" name"]?
这是我身边的一个错误。不确定,如果是因为Libyaml-CPP的错误安装...它开始工作一次,然后删除并重新安装了Libyaml-CPP0.5/Libyaml-CPP-DEV。谢谢!
首先要注意的是:yaml对格式非常敏感,例如。空间。您可以首先尝试使用一些在线YAML解析器来解析您的YAML。
我刚刚使用yaml-online-parser尝试了一下,请参阅以下文档(例如,两个空格凹痕,始终在密钥/值之间一个空间(
(- person: p1
obj:
name: x
age: 27
- person: p2
obj:
name: y
age: 38
您提供了两个person
对象的列表,我想这就是为什么您的根节点config.IsNull()
返回true。
您可以尝试检查对象类型,例如。就像在YAML-CPP教程中:
switch (node.Type()) {
case Null: // ...
case Scalar: // ...
case Sequence: // ...
case Map: // ...
case Undefined: // ...
}
我尚未测试以下测试,但它可能在您的循环中起作用:
string name(""), age("");
if (node["obj"] == NULL) continue;
if (node["obj"]["name"]) {
name = node["obj"]["name"].as<std::string>();
}
if (node["obj"]["age"]) {
age = node["obj"]["age"].as<std::string>();
}
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 使用YAML -CPP新API - 已修复的YAML文件解决