文章目录
- 一、yaml 介绍
- 1.1 yaml 介绍
- 1.2 yaml 教程
- 1.3 yaml 在线工具
- 1.4 yaml 出现背景
- 二、C/C++ yaml 库选型
- 2.2 libfyaml
- 2.3 yaml-cpp
一、yaml 介绍
1.1 yaml 介绍
YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,通常用于配置文件和数据交换。它由Clark Evans在2001年创建,旨在成为一种简单、直观且易于理解的格式。以下是YAML的一些关键特点和优势:
-
简洁性:
- YAML的设计目标是尽可能简洁,易于阅读和编写。它使用缩进来表示层次结构,而不是像XML那样的标签。
-
易读性:
- YAML文件的可读性非常高,适合人类阅读和编辑,而不仅仅是机器解析。
-
灵活性:
- YAML支持多种数据类型,包括标量(如字符串、整数、浮点数)、序列(列表)、映射(键值对集合)等。
-
扩展性:
- 可以通过YAML标签和锚点实现数据的扩展和重用。
-
跨语言支持:
- YAML被广泛支持,有多种编程语言的库可以解析和生成YAML格式的数据。
-
数据表示:
- YAML提供了多种方式来表示数据,例如使用连字符(-)表示列表项,使用冒号(:)表示键值对。
-
缩进敏感:
- YAML使用缩进来表示数据的层次结构,不同的缩进级别表示不同的数据层级。
-
注释支持:
- YAML支持使用井号(#)添加注释,这使得配置文件更加易于理解和维护。
-
数据转换:
- YAML可以轻松地与其他格式(如JSON)进行转换,许多库都提供了这种转换功能。
-
安全性:
- YAML文件通常不包含执行代码,这使得它们在安全性方面比某些其他格式更优。
YAML的基本语法
-
标量:基本的数据类型,如字符串、整数、浮点数。
age: 25 message: "Hello, YAML!"
-
序列:有序的集合,使用连字符(-)表示。
fruits:- apple- banana- orange
-
映射:无序的键值对集合,使用冒号(:)表示。
person:name: John Doeage: 30
-
复合结构:可以组合使用序列和映射。
employees:- name: John Doeage: 30- name: Jane Smithage: 28
-
注释:
# This is a comment configuration: production
应用场景
- 配置文件:用于应用程序的配置。
- 数据交换:在不同的系统或应用程序之间交换数据。
- 文档存储:存储结构化数据,如数据库模式或文档元数据。
YAML因其简洁和易读性,已经成为许多项目的首选配置文件格式。
1.2 yaml 教程
- https://yaml.org/
- https://yaml.org/spec/
- https://github.com/yaml
- https://www.yaml.info/learn/index.html
- YAML 入门教程
- YAML 语言教程
- YAML 和 JSON 之间有什么区别?
1.3 yaml 在线工具
- yaml 在线编辑转JSON:https://www.bejson.com/validators/yaml_editor/
- yaml 在线编辑转JSON:http://nodeca.github.io/js-yaml/
1.4 yaml 出现背景
YAML(YAML Ain’t Markup Language)是一种用于数据序列化的语言,它被设计为易于人类阅读和编写,同时机器解析也相对简单。以下是 YAML 的历史和出现背景的详细介绍:
出现背景
- 可读性:传统的数据表示格式如 XML 和 JSON 虽然易于机器解析,但对人类来说阅读和编写较为繁琐。YAML 的设计初衷是提高数据表示的可读性。
- 简洁性:YAML 使用缩进来表示层级结构,避免了大量结束标签的使用,使得数据结构更加直观和简洁。
- 通用性:YAML 被设计为一种通用的数据交换格式,可以用于配置文件、数据存储、网络通信等多种场景。
发展历程
- 2001年:YAML 的概念首次被提出。当时,Bruce Potter 和 Clark Evans 在他们的项目中需要一种新的数据表示方法,他们开始探索一种更易于人类阅读和编写的格式。
- 2006年:Orson Peters 和 Kirill Simonov 重新设计了 YAML 的语法,发布了 YAML 1.1 版本。这个版本引入了许多新的特性,如标签、多文档支持等。
- 2009年:YAML 1.2 版本发布,进一步改进了语言的规范和解析器的实现。YAML 1.2 版本增加了对 Unicode 的支持,改进了解析器的错误处理机制。
语言特性
- 缩进:YAML 使用缩进来表示层级结构,每个层级的缩进通常是两个空格。
- 无括号:YAML 不使用括号来表示数据结构,而是使用缩进和冒号(:)来分隔键值对。
- 多文档:YAML 支持在一个文件中包含多个文档,每个文档之间用
---
分隔。 - 数据类型:YAML 支持多种数据类型,包括标量(如字符串、整数、浮点数)、序列(如列表、数组)和映射(如字典、哈希表)。
- 标签:YAML 允许使用标签来指定数据的类型,提高数据的表达能力。
YAML 的设计哲学是“人类可读性优于机器可读性”,这使得它在需要人类参与和编辑的场景中非常受欢迎。随着技术的发展,YAML 也在不断地演进和改进,以满足更多的应用需求。
二、C/C++ yaml 库选型
- 参考:
- https://yaml.org/
- https://www.yaml.info/libraries/index.html
- 开源库:
- libfyaml:https://github.com/pantoniou/libfyaml
- yaml-cpp:https://github.com/jbeder/yaml-cpp
- libyaml、libcyaml:不支持yaml 1.2
2.2 libfyaml
2.3 yaml-cpp
mkdir build; cd build# cmake [-G generator] [-DYAML_BUILD_SHARED_LIBS=on|OFF] ..# 默认编译静态库
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install ..# 配置编译动态库
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DYAML_BUILD_SHARED_LIBS=on ..# 开启TEST
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DYAML_CPP_BUILD_TESTS=ON ..