简介
- YAML 基础知识
yaml是什么
YAML(YAML Ain’t Markup Language的递归缩写)是一种人类可读的数据序列化格式。它常用于配置文件和数据交换格式,特别适用于各种编程语言之间的数据传递。
YAML的设计目标之一是提供一种易读且简洁的表示方法,以区别于其他常见的数据交换格式,如JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)。相对于其他格式,YAML更注重人类可读性,其语法结构主要基于缩进和简洁的标记。
以下是一个简单的YAML示例,表示一个包含一些信息的简单结构:
1
2
3
4
name: John Doe
age: 30
city: New York
is_student: false
在上面的例子中,每一行都是一个键值对,用冒号分隔。缩进表示层次结构,例如name
、age
和city
是顶级键,而is_student
是其中一个嵌套的键。与其他格式相比,YAML更加人类可读,因为它不需要额外的符号和标记。
YAML广泛用于各种场景,包括配置文件、CI/CD流水线配置、数据序列化等。
YAML 详解
YAML(YAML Ain’t Markup Language)是一种用于表示数据序列化的格式,其设计目标是提供一个易读且简洁的文本表达方式。下面是一些关于YAML的详细解释:
- 基本语法:
- 键值对:使用冒号(
:
)将键和值分隔。1
key: value
- 列表:使用连字符(
-
)表示列表项,列表项可以包含简单的值或者嵌套的键值对。 ```yaml- item1
- item2
- key: value ```
- 嵌套结构:使用缩进表示层次结构。
1 2 3
parent: child1: value1 child2: value2
- 键值对:使用冒号(
- 数据类型:
- 字符串:可以使用单引号或双引号括起来,也可以不使用引号。
1 2 3
string1: 'single quoted' string2: "double quoted" string3: unquoted
- 整数和浮点数:直接表示数字。
1 2
integer: 42 float: 3.14
- 布尔值:可以使用
true
或false
表示。1
boolean: true
- 字符串:可以使用单引号或双引号括起来,也可以不使用引号。
- 注释:以井号(
#
)开头表示注释。1 2
# This is a comment key: value
- 多行文本:使用竖线符号(
|
)表示多行文本块,保留换行符。1 2 3 4
multiline: | This is a multiline text block.
- 折叠多行文本:使用右尖括号(
>
)表示折叠多行文本块,将换行符替换为空格。1 2 3 4
folded: > This is a folded multiline text block.
- 引用:可以使用
&
创建锚点,使用*
引用锚点。1 2 3 4
parent: &anchor key: value reference: *anchor
- 特殊值:
null
表示空值。1
key: null
- 更多示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
user: name: John Doe age: 30 is_student: false colors: - red - green - blue settings: enable_feature: true timeout: 5000
总体而言,YAML是一种灵活且易读的数据格式,广泛用于配置文件、数据交换和其他应用场景。在使用时,要注意缩进和空格的正确使用,因为它们在YAML中起着重要的语法作用。
yaml 基本语法 详解
YAML(YAML Ain’t Markup Language)的基本语法非常简洁和直观,以下是对其基本语法要点的详解:
- 键值对:
- 使用冒号(
:
)将键和值分隔。 - 键值对的格式为
key: value
。
1 2
name: John Doe age: 30
- 使用冒号(
- 列表:
- 使用连字符(
-
)表示列表项。 - 列表项可以包含简单的值或者嵌套的键值对。
1 2 3 4
fruits: - apple - banana - orange
- 使用连字符(
- 嵌套结构:
- 使用缩进表示层次结构,通常使用空格进行缩进。
- 缩进的空格数可以不同,但同一层次必须保持一致。
1 2 3 4 5 6
person: name: John Doe age: 30 address: city: New York zip: '10001'
- 字符串:
- 字符串可以使用单引号或双引号括起来,也可以不使用引号。
- 使用引号可以避免一些特殊字符引起的歧义。
1 2 3
single_quoted: 'This is a single-quoted string.' double_quoted: "This is a double-quoted string." unquoted: This is an unquoted string.
- 整数和浮点数:
- 直接表示数字,可以是整数或浮点数。
1 2
integer: 42 float: 3.14
- 布尔值:
- 使用
true
或false
表示布尔值。
1
is_student: false
- 使用
- 注释:
- 使用井号(
#
)表示注释,注释可以单独一行或在行尾添加。
1 2
# This is a comment key: value # Comment at the end of a line
- 使用井号(
- 多行文本:
- 使用竖线符号(
|
)表示多行文本块,保留换行符。
1 2 3 4
multiline: | This is a multiline text block.
- 使用竖线符号(
- 折叠多行文本:
- 使用右尖括号(
>
)表示折叠多行文本块,将换行符替换为空格。
1 2 3 4
folded: > This is a folded multiline text block.
- 使用右尖括号(
- 引用:
- 可以使用
&
创建锚点,使用*
引用锚点。
1 2 3 4
parent: &anchor key: value reference: *anchor
- 可以使用
- 特殊值:
null
表示空值。
1
key: null
这些基本语法要点构成了YAML的基础,使其适用于多种场景,特别是作为配置文件或数据交换格式。在使用YAML时,注意缩进和空格的正确使用是非常重要的,因为它们直接影响文档的结构。
CPP中常用的YAML解析工具
除了YAML-cpp之外,还有一些其他常用的C++ YAML解析工具,这些工具提供了不同的功能和特性,可以根据项目需求选择合适的工具。以下是一些常见的C++ YAML解析工具:
-
YAML-cpp:YAML-cpp是一个流行的C++库,用于解析和生成YAML数据。它提供了简单易用的API,支持YAML 1.2规范,并且可以在多种平台上使用。上面提供的示例代码演示了如何使用YAML-cpp。
-
LibYAML:LibYAML是一个C库,但也有C++绑定可供使用。它是一个高性能的YAML解析器和生成器,支持YAML 1.2规范。虽然它在C++中需要使用C绑定,但它在处理大型YAML文件时性能出色。
-
YAML-cpp-Parser:这是一个建立在YAML-cpp之上的库,用于更方便地解析YAML数据。它提供了更简洁的API,可以帮助简化解析过程。
-
yaml-cpp03:这是YAML-cpp的一个旧版本,与C++03标准兼容。如果你的项目需要C++03支持,可以考虑使用此版本。
-
yaml-cpp11:这是YAML-cpp的C++11版本,支持现代C++标准。它在C++11及更高版本中使用时更适用。
-
YAML++:YAML++是另一个C++ YAML解析库,它提供了类型安全的API和更高级的功能,如自定义类型序列化和反序列化。
-
SimpleYAML:SimpleYAML是一个轻量级的C++库,用于处理YAML数据。它设计简单,易于学习和使用,适用于小型项目和快速原型开发。
-
Boost.PropertyTree:虽然Boost.PropertyTree不是专门用于YAML的库,但它支持多种数据格式,包括JSON和INI,可以用于解析YAML文件。这个库是Boost C++库集合的一部分。
根据项目的具体要求和C++标准的选择,你可以选择适合你需求的YAML解析工具。不同的工具在性能、易用性和功能方面可能有所不同,因此选择合适的工具非常重要。在使用任何库之前,建议查看其文档和示例以了解如何正确使用。