yaml格式

 

 

 

 

 

 yaml中允许表示三种格式,分别为常量值、对象和数组

例如:

其中#作为注释,yaml中只有行注释

基本格式要求:

1.大小写敏感;2.使用缩进代表层级关系;

3.缩进只能使用空格,不能使用tab键,不要求空格个数,只需要相同层级左对齐(一般2或4个空格)。

对象:

使用冒号代表,格式为key:  value。冒号后要有一个空格:

可使用缩进表示层级关系:

yaml中还支持流式(flow)语法表示对象,比如上面例子可写为:

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value:

意思即对象的属性是一个数组[complexkey1, complexkey2],对应的值也是一个数组[complexvalue1, complexvalue2]

使用流式语法即为[complexkey1,complexkey2]:[complexvalue1,complexvalue2]

数组

使用一个短横线加一个空格表示一个数组项:

当然也可以有这样的写法:

可以简单的理解为[[java,LOL]]

一个相对复杂的例子:

意思是companies属性是一个数组,每一个数组元素又是由id、name、price三个属性构成;

使用流式语法表示为:

常量:

yaml中提供了多种常量结构,包括整数、浮点数、字符串、null、日期、布尔值、时间。

使用+代表时区

特殊符号

1. ---  yaml可以在同一个文件中,使用---表示一个文档的开始:

代表定义了两个profile,一个是development,一个是production;也常使用---来分割不同的内容,比如记录日志:

2. ...和---配合使用,在一个配置文件中代表一个文件的结束:

相当于在一个yaml中连续写了两个yaml配置项

3. !!yaml中使用!!做类型强行转换:

相当于把数字和布尔值类型强转换为字符串

将数组解析为set集合,简单理解,转化的内容就是[{Mark McGwire: 65}, {Sammy Sosa: 63}, {Ken Griffy: 58}],去掉重复。

4. >在字符串中折叠换行, |保留换行,这两个符号是yaml中字符串经常使用的符号,比如:

那么,accomplishment的结果为:将换行符转化成了空格,需要主意的是,每行的文本钱一定要有一个空格

 

stats的结果是:

常见|符号多用于yaml中配置html片段:

5.引用。重复的内容在yaml中可以使用&符号来完成锚点定义,使用*来完成锚点引用,例如:

可以看到,在hr中,使用&SS为Sammy Sosa设置了一个锚点引用,名称为SS,在rbi中,使用*SS来引用锚点:

我们也可以这样定义:

注意:不能独立的定义锚点,比如不能直接这样写: &SS Sammy Sosa;另外,锚点能够定义更复杂的内容,比如:

那么hr相当于引用了default的数组,注意,hr: *default要写在同一行。

6.合并内容。主要和锚点配合使用,可以将一个锚点内容直接合并到一个对象中,例如:

在merge中定义了四个锚点,分别在sample中使用。

sample1中,<<: *CENTER意思是引用{x: 1, y:2},并且合并到sample1中,那么合并的结果为:sample1={r=10, y=2,x=1}

sample2中,<<: [*CENTER, *BIG]意思是联合引用{x:1, y:2}和{R: 10},并且合并到sample2中,那么结果为sample2={other=haha,x=1,y=2}

sample3中,引入了*CENTER,*BIG,还使用了r: 100覆盖了引入的r:10,所以sample3值为sample3={r=100, y=2, x=1}

 

转载于:https://www.cnblogs.com/caibao666/p/10238497.html

YAML(**YAML Ain't Markup Language**)是一种**人类可读性强**的数据序列化格式,常用于配置文件、数据交换等场景。相比 JSON 和 XML,YAML 更加简洁、易读,适合用于配置文件。 --- ### ✅ YAML 格式的基本语法 YAML 的语法简洁,主要依赖**缩进**来表示结构,支持多种数据类型(字符串、数字、布尔、列表、映射等)。 #### 示例 YAML 配置文件 ```yaml server: port: 8080 root_dir: /var/www/html enable_ssl: true thread_pool_size: 4 database: host: localhost port: 3306 credentials: user: admin password: secret features: - caching - compression - logging ``` --- ### ✅ YAML 的核心特点 | 特性 | 说明 | |------|------| | **可读性高** | 用缩进代替括号,更易读 | | **支持多种数据结构** | 标量、列表(数组)、映射(对象) | | **跨语言支持** | 被 Python、Ruby、Go、Java 等广泛支持 | | **支持别名与锚点** | 可复用数据结构 | | **支持多种编码格式** | UTF-8、UTF-16 等 | --- ### ✅ YAML 支持的数据类型示例 #### 标量(Scalar) ```yaml name: John Doe age: 30 is_student: false ``` #### 列表(List) ```yaml fruits: - apple - banana - orange ``` #### 映射(Map) ```yaml user: name: Alice email: alice@example.com ``` #### 多行字符串 ```yaml bio: | This is a block of text. It spans multiple lines. ``` --- ### ✅ YAML 与 JSON 对比 | 特性 | YAML | JSON | |------|------|------| | 可读性 | 高 | 中 | | 缩进 | 依赖缩进 | 不依赖 | | 注释 | 支持 `#` | 不支持 | | 数据结构 | 更丰富 | 基础结构 | | 解析难度 | 更复杂 | 更简单 | | 使用场景 | 配置文件、CI/CD、Kubernetes | API通信、数据传输 | --- ### ✅ C语言中解析 YAML 的方法 C语言本身不内置 YAML 支持,但可以使用第三方库,如: #### 🔹 [LibYAML](https://pyyaml.org/wiki/LibYAML) - 官网:https://pyyaml.org/wiki/LibYAML - 是一个 C 语言实现的 YAML 解析器 - 提供事件驱动 API(类似 SAX) - 适合嵌入式系统或底层开发 ##### 示例用法(伪代码) ```c #include <yaml.h> yaml_parser_t parser; yaml_event_t event; FILE *fh = fopen("config.yaml", "rb"); yaml_parser_initialize(&parser); yaml_parser_set_input_file(&parser, fh, NULL); do { yaml_event_parse(&parser, &event); // 处理 event yaml_event_delete(&event); } while (event.type != YAML_STREAM_END_EVENT); yaml_parser_delete(&parser); fclose(fh); ``` --- ### ✅ 注意事项 - 缩进错误会导致解析失败 - 不适合大文件或高性能场景(解析较慢) - 依赖第三方库(C语言中没有内置支持) --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值