YAML 入门教程

YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写,是一种人类可读的完整的数据序列化语言。YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

YAML 的配置文件后缀为 .yml.yaml,如:test.yml 或 test.yaml

YAML 官网: The Official YAML Web Site

一个YAML在线编辑及校验工具: YAML、YML在线编辑器(格式化校验)-BeJSON.com

关于java操作yaml的介绍,参考【java 操作 yaml 文件】( https://blog.csdn.net/xijinno1/article/details/139885464 )

1.简介

1.1.基本语法规则(基于缩进的Block Style

大小写敏感

使用缩进表示层级关系

缩进不允许使用tab,只允许空格

缩进的空格数不重要(官方推荐使用2个空格字符),只要相同层级的元素左对齐即可

'#'表示注释,YAML支持单行注释,不支持多行注释,注释可以用来解释代码或者标记代码。

1.2.基本语法规则(基于显式指示符的表示范围的Flow Style):

流序列:以逗号分隔的列表形式写入,并置于方括号[]内。

流映射:以逗号分隔的列表形式写入,并置于大括号{}内。

1.3.一个YAML文件或流可以包含多个文档Documents

文档可以显式地以---开头(可选的)。在规范中称此为指令结束标记,但实际使用中更多称为文档开始标记;

文档可以显式地以...结尾(可选的)。在规范中称此为文档结束标记,如果文档没有指令,可以省略---,仅用...来分割多个文档;

如果YAML文件或流仅包含一个文档,那么--- ...可以省略

1.4.YAML支持两个指令:

版本指令:指令放在---之前行,如 %YAML 1.2 用于告知 YAML 处理器使用哪个版本处理当前文档;

标签指令:为用户提供自定义处理程序的速记标记的方法,一般很少使用

2.数据类型

YAML 支持以下3种数据类型:

标量(Scalar):原子数据类型,如:字符串(String)、数字(Numbers)、布尔值(Boolean)和空值(null)等;

序列(Sequence):节点列表,类似某些编程语言的数组(Array)、列表(List)等;

映射(Mapping):节点到节点的映射,键值对,类似某些编程语言的哈希(Hash)、哈希映射(Hash Map)、字典(Dict)、对象(Objects)等;与许多编程语言不同,键key可以是序列或映射。

2.1.映射(Mapping)

键值对使用冒号结构表示 key: value,冒号后面要加一个空格。

也可以使用 key:{key1: value1, key2: value2, ...}

还可以使用缩进表示层级关系(写在多行);

key:
    child-key: value
    child-key2: value2

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


    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2

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

2.2.序列(Sequence)

以 - 开头的行表示构成一个数组:

- A
- B
- C

YAML 支持多维数组,可以使用行内(写在一行)表示:

key: [value1, value2, ...]

数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。

-
 - A
 - B
 - C

一个相对复杂的例子:

companies:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W

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

数组也可以使用流式(flow)的方式表示:

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

2.3.复合结构

数组和对象可以构成复合结构,例:

languages:
  - Ruby
  - Perl
  - Python
websites:
  YAML: yaml.org
  Ruby: ruby-lang.org
  Python: python.org
  Perl: use.perl.org

转换为 json 为:

{
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org'
  }
}

2.4.标量(Scalar)

纯量是最基本的,不可再分的值,包括:

布尔值

整数

浮点数

Null

时间

日期

字符串

使用一个例子来快速了解纯量的基本使用:

boolean:
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以

int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示

float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法

date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
    -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    #字符串默认不使用引号表示

    - 'Hello world'  #如果字符串之中包含空格或特殊字符,必须放在引号(双引号或单引号)之中

    - "Hello\nworld" #双引号不会对特殊字符转义

    - 'Hello\nworld' #等同于 "Hello\\nworld"待确定

    - 'It''s' #单引号之中如果还有单引号,必须连续使用2个单引号转义。

    - newline
      newline2    #字符串可以拆成多行,从第2行开始,必须有一个单空格缩进
,每一行换行符会被转化成一个空格

str: 这是一段

  多行 

  字符串 

等同于下面代码

{ str: '这是一段 多行 字符串' }

多行字符串可以使用 | 保留换行符,也可以使用> 折叠换行。

this: |

  Foo

  Bar

that: >

  Foo

  Bar 

等同于下面代码

{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

2.5..强制转换数据类型

允许使用两个感叹号,强制转换数据类型:

e: !!str 123

f: !!str true

2.6.引用

& 锚点和 * 别名,可以用来引用:

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

相当于:

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。

下面是另一个例子:

- &showell Steve
- Clark
- Brian
- Oren
- *showell

等同于下面的代码:

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

参考资料:  YAML 入门教程 | 菜鸟教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔部署GeoServer教程

前期准备&#xff1a;下载geoserver 直接用我上传的geoserver或者是去官网下https://geoserver.org/release/stable/ 压缩包的geoserver版本是&#xff1a;2.25.1 jdk要求版本是&#xff1a;jdk11以上 tomcat版本&#xff1a;可选8或者9&#xff0c;建议用9 windows选择Window…

linux./xxx.py :Command not found

从windows传入linux系统中的py文件&#xff0c;在运行时出现了如标题所示的错误 第一行#!/bin/python3 但是却无法使用./xxx.py运行&#xff0c;通过一番调试&#xff0c;发现 windows的换行符与linux的换行符不一致导致了错误的发生 如何解决这个问题&#xff0c;使用dos2unix…

视频监控统一管理平台LntonCVS安防视频监控系统视频汇聚方案

LntonCVS平台最初被设计为一个以视频汇聚为核心的平台。那么&#xff0c;什么是视频汇聚平台&#xff0c;以及它是如何处理视频资源的呢&#xff1f;简单来说&#xff0c;视频汇聚平台能够从不同的视频源&#xff08;如直播和点播&#xff09;收集、整合和展示视频内容。以下是…

春天,快速恢复能量的10件小事(不妨试试)

春天快速恢复能量的十件小事&#xff0c;不妨试试随着天气回暖&#xff0c;万物都在恢复生机。 只是很多朋友感慨自己似乎总有些能量不足&#xff0c;没干什么重活累活&#xff0c;但觉得浑身疲乏&#xff0c;精神状态很低迷&#xff0c;不仅容易走神&#xff0c;而且记忆力也在…

Docker可视化web工具

docker run --restart always --name docker.ui -d -v /var/run/docker.sock:/var/run/docker.sock -p 8989:8999 joinsunsoft/docker.ui #--restart always&#xff1a;重启策略&#xff0c;只要关闭就会重启 http://192.168.10.51:8989 账号&#xff1a;ginghan 密码&#xf…

IOS Swift 从入门到精通: 函数,参数和异常

文章目录 编写函数接受参数返回值参数标签省略参数标签默认参数可变参数函数编写抛出函数运行异常函数输入输出参数总结 编写函数 函数让我们可以重复使用代码&#xff0c;这意味着我们可以编写一个函数来做一些有趣的事情&#xff0c;然后从很多地方运行该函数。重复代码通常…

Java匿名类

Java 匿名类是一种特殊的内部类&#xff0c;它没有名字&#xff0c;并且通常用来简化代码实现&#xff0c;尤其是在实现接口或者抽象类的实例时。匿名类可以在实例化时定义其行为&#xff0c;而不需要创建单独的类文件。 匿名类的特点 没有名字&#xff1a;匿名类是没有名字的…

写代码必用字体

下载链接 字体下载链接 使用情况/截图 软件&#xff1a;DEV-CPP 系统&#xff1a;Win10专业版 自带判等、大于、小于等符号的专属字体

计算机组成原理网课笔记2

存储系统基本概念 CPU&#xff1a;运算器控制器。​ 作为计算机系统的运算和控制核心&#xff0c;是信息处理、程序运行的最终执行单元。 ​ 主存储器的基本组成 半导体元件的原理 在电容上面的金属板加一个5V的高电平&#xff0c;产生电压差&#xff0c;电容里面的电荷就会开…

计算机系统基础实训五—CacheLab实验

实验目的与要求 1、让学生更好地应用程序性能的优化方法&#xff1b; 2、让学生更好地理解存储器层次结构在程序运行过程中所起的重要作用&#xff1b; 3、让学生更好地理解高速缓存对程序性能的影响&#xff1b; 实验原理与内容 本实验将帮助您了解缓存对C程序性能的影响…

带你学习Mybatis之MappedStatement

mybatis之MappedStatement MappedStatement是保存mapper.xml的一个节点(select|insert|delete|update)&#xff0c;包括许多配置的sql、sql的id、缓存信息、resultMap、parameterType、resultType、languageDriver等重要配置内容 public final class MappedStatement { privat…

【面向对象】复习(二)

内存对齐 class A{ static int a; } int main(){ A obj; cout<<sizeof(obj); } 在你的代码中&#xff0c;class A 包含一个静态成员变量 a。静态成员变量不属于类的任何特定实例&#xff0c;而是属于整个类。因此&#xff0c;在计算类的实例大小时&#xff0c;静态…

如何在 Ubuntu 14.04 上使用 HAProxy 实现 SSL 终止

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 HAProxy&#xff0c;全称高可用代理&#xff0c;是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案&#xff0c;可在 Linu…

2024.6.22 刷题总结

2024.6.22 **每日一题** 2663.字典序最小的美丽字符串&#xff0c;该题考察了回文串的性质&#xff0c;一个回文串去掉首尾字母后&#xff0c;仍然是回文串&#xff0c;可以根据这一性质得到如果没有长度为m-2的回文串&#xff0c;那么就不会有长度为m的回文串.由答案取的是最小…

OpenXlab应用部署踩坑记录

参考博客&#xff1a; OpenXlab应用部署经验_xlabdemo-web-CSDN博客 书生浦语大模型实战营Day04OpenXLab 部署_openxlab.org.cn上传模型-CSDN博客 应用创建流程 | OpenXLab浦源 - 文档中心 1、已经在OpenXlab上上传好了模型 在上传好的模型查看一下如何使用模型 2、github…

colmap无GUI编译

cmake … -GNinja -DGUI_ENABLEDFalse

基于肤色模型的人脸识别,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020&#xff0c;基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV&#xff0c;主要用于优化彩色视频信号的传输。与RGB视频信号传输相比&#xff0c;它最大的优点在于只需占用极少的频宽&#xff08;RGB要求三个独立的视频信号同时传输&#xff09;。其…

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置方法 testpaths testcases/fenmi testcases/weixin testcases/Zgen

Java 和 Go 中的 byte 和 String 转换

背景 在讨论 Java 和 Go 中的 byte 和 String 之间的转换时&#xff0c;需要理解它们对字符串和字节数组的不同处理方式&#xff0c;尤其是对于编码和解码的策略。让我们深入探讨 Java 和 Go 在处理这些转换时的设计和实现。 Java 中的 byte[] 和 String 转换&#xff1a; Ja…

MQTTfx连接阿里云(详细版)

1、介绍 作为物联网开放平台&#xff0c;阿里云可谓是吸引大多数嵌入式爱好者的平台。物联网MQTT协议火热的今天&#xff0c;你使用过阿里云吗&#xff1f;本篇文章带你接触阿里云&#xff0c;实现MQTT通信。 我们在测试MQTT之前先了解下什么是MQTT协议。大家都知道它是一种发…