YAML最基本,最常用的一些使用格式:
首先YAML中允许表示三种格式,分别是常量值,对象和数组1
2
3
4
5
6
7
8
9
10
11
12
13url: http://www.wolfcode.cn
server:
host: http://www.wolfcode.cn
server:
- 120.168.117.21
- 120.168.117.22
- 120.168.117.23
#常量
pi: 3.14 #定义一个数值3.14
hasChild: true #定义一个boolean值
name: 'Hello YAML' #定义一个字符串
yaml-cpp 读 yaml
ROS默认的yaml-cpp
版本一般在0.5以上,CMakeLists如下配置1
2
3
4
5
6
7
8
9
10include_directories(
/usr/include
${catkin_INCLUDE_DIRS}
)
add_executable(${PROJECT_NAME} src/test_yaml.cpp)
target_link_libraries(${PROJECT_NAME}
${catkin_LIBRARIES}
yaml-cpp # 这里必须有
)
从map_server
中学习一段代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 必须自定义,不明白为什么网上的资料都没有提到
template<typename T> void operator >> (const YAML::Node& node, T& i )
{
i = node.as<T>();
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "test_yaml" );
ros::NodeHandle nh;
std::string file = "/home/user/map.yaml";
std::ifstream fin(file.c_str());
if (fin.fail() )
{
ROS_ERROR("could not open %s.", file.c_str());
return false;
}
// 适用于 0.5 以上版本
YAML::Node doc = YAML::Load(fin);
try {
double res, negate;
std::string image;
doc["resolution"] >> res;
doc["image"] >> image;
ROS_INFO("res: %f", res );
ROS_INFO("negate: %f", negate);
ROS_INFO("image: %s", image.c_str() );
}
catch (YAML::InvalidScalar &e) {
ROS_ERROR("The map yaml file error, reason: %s.", e.what());
return false;
}
}
Python 读 Yaml
读YAML的最好方法是使用Python的yaml库PyYAML
,到官网下载安装后,可以先运行测试程序看是否成功。
读取程序如下:1
2
3
4
5
6import yaml,os
f = open("test.yaml")
y = yaml.load(f,Loader=yaml.FullLoader)
print y
运行后,结果: