简介

  • 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

在上面的例子中,每一行都是一个键值对,用冒号分隔。缩进表示层次结构,例如nameagecity是顶级键,而is_student是其中一个嵌套的键。与其他格式相比,YAML更加人类可读,因为它不需要额外的符号和标记。

YAML广泛用于各种场景,包括配置文件、CI/CD流水线配置、数据序列化等。

YAML 详解

YAML(YAML Ain’t Markup Language)是一种用于表示数据序列化的格式,其设计目标是提供一个易读且简洁的文本表达方式。下面是一些关于YAML的详细解释:

  1. 基本语法
    • 键值对:使用冒号(:)将键和值分隔。
      1
      
      key: value
      
    • 列表:使用连字符(-)表示列表项,列表项可以包含简单的值或者嵌套的键值对。 ```yaml
      • item1
      • item2
      • key: value ```
    • 嵌套结构:使用缩进表示层次结构。
      1
      2
      3
      
      parent:
        child1: value1
        child2: value2
      
  2. 数据类型
    • 字符串:可以使用单引号或双引号括起来,也可以不使用引号。
      1
      2
      3
      
      string1: 'single quoted'
      string2: "double quoted"
      string3: unquoted
      
    • 整数和浮点数:直接表示数字。
      1
      2
      
      integer: 42
      float: 3.14
      
    • 布尔值:可以使用 truefalse 表示。
      1
      
      boolean: true
      
  3. 注释:以井号(#)开头表示注释。
    1
    2
    
    # This is a comment
    key: value
    
  4. 多行文本:使用竖线符号(|)表示多行文本块,保留换行符。
    1
    2
    3
    4
    
    multiline: |
      This is a
      multiline
      text block.
    
  5. 折叠多行文本:使用右尖括号(>)表示折叠多行文本块,将换行符替换为空格。
    1
    2
    3
    4
    
    folded: >
      This is a folded
      multiline
      text block.
    
  6. 引用:可以使用 & 创建锚点,使用 * 引用锚点。
    1
    2
    3
    4
    
    parent: &anchor
      key: value
    
    reference: *anchor
    
  7. 特殊值
    • null 表示空值。
      1
      
      key: null
      
  8. 更多示例
    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)的基本语法非常简洁和直观,以下是对其基本语法要点的详解:

  1. 键值对
    • 使用冒号(:)将键和值分隔。
    • 键值对的格式为 key: value
    1
    2
    
    name: John Doe
    age: 30
    
  2. 列表
    • 使用连字符(-)表示列表项。
    • 列表项可以包含简单的值或者嵌套的键值对。
    1
    2
    3
    4
    
    fruits:
      - apple
      - banana
      - orange
    
  3. 嵌套结构
    • 使用缩进表示层次结构,通常使用空格进行缩进。
    • 缩进的空格数可以不同,但同一层次必须保持一致。
    1
    2
    3
    4
    5
    6
    
    person:
      name: John Doe
      age: 30
      address:
        city: New York
        zip: '10001'
    
  4. 字符串
    • 字符串可以使用单引号或双引号括起来,也可以不使用引号。
    • 使用引号可以避免一些特殊字符引起的歧义。
    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.
    
  5. 整数和浮点数
    • 直接表示数字,可以是整数或浮点数。
    1
    2
    
    integer: 42
    float: 3.14
    
  6. 布尔值
    • 使用 truefalse 表示布尔值。
    1
    
    is_student: false
    
  7. 注释
    • 使用井号(#)表示注释,注释可以单独一行或在行尾添加。
    1
    2
    
    # This is a comment
    key: value  # Comment at the end of a line
    
  8. 多行文本
    • 使用竖线符号(|)表示多行文本块,保留换行符。
    1
    2
    3
    4
    
    multiline: |
      This is a
      multiline
      text block.
    
  9. 折叠多行文本
    • 使用右尖括号(>)表示折叠多行文本块,将换行符替换为空格。
    1
    2
    3
    4
    
    folded: >
      This is a folded
      multiline
      text block.
    
  10. 引用
    • 可以使用 & 创建锚点,使用 * 引用锚点。
    1
    2
    3
    4
    
    parent: &anchor
      key: value
    
    reference: *anchor
    
  11. 特殊值
    • null 表示空值。
    1
    
    key: null
    

这些基本语法要点构成了YAML的基础,使其适用于多种场景,特别是作为配置文件或数据交换格式。在使用YAML时,注意缩进和空格的正确使用是非常重要的,因为它们直接影响文档的结构。

CPP中常用的YAML解析工具

除了YAML-cpp之外,还有一些其他常用的C++ YAML解析工具,这些工具提供了不同的功能和特性,可以根据项目需求选择合适的工具。以下是一些常见的C++ YAML解析工具:

  1. YAML-cpp:YAML-cpp是一个流行的C++库,用于解析和生成YAML数据。它提供了简单易用的API,支持YAML 1.2规范,并且可以在多种平台上使用。上面提供的示例代码演示了如何使用YAML-cpp。

  2. LibYAML:LibYAML是一个C库,但也有C++绑定可供使用。它是一个高性能的YAML解析器和生成器,支持YAML 1.2规范。虽然它在C++中需要使用C绑定,但它在处理大型YAML文件时性能出色。

  3. YAML-cpp-Parser:这是一个建立在YAML-cpp之上的库,用于更方便地解析YAML数据。它提供了更简洁的API,可以帮助简化解析过程。

  4. yaml-cpp03:这是YAML-cpp的一个旧版本,与C++03标准兼容。如果你的项目需要C++03支持,可以考虑使用此版本。

  5. yaml-cpp11:这是YAML-cpp的C++11版本,支持现代C++标准。它在C++11及更高版本中使用时更适用。

  6. YAML++:YAML++是另一个C++ YAML解析库,它提供了类型安全的API和更高级的功能,如自定义类型序列化和反序列化。

  7. SimpleYAML:SimpleYAML是一个轻量级的C++库,用于处理YAML数据。它设计简单,易于学习和使用,适用于小型项目和快速原型开发。

  8. Boost.PropertyTree:虽然Boost.PropertyTree不是专门用于YAML的库,但它支持多种数据格式,包括JSON和INI,可以用于解析YAML文件。这个库是Boost C++库集合的一部分。

根据项目的具体要求和C++标准的选择,你可以选择适合你需求的YAML解析工具。不同的工具在性能、易用性和功能方面可能有所不同,因此选择合适的工具非常重要。在使用任何库之前,建议查看其文档和示例以了解如何正确使用。