1. 概述

    1. 简单介绍 YAML 语言
  2. 背景

    1. 很多地方, 都在使用 YAML

      1. k8s
      2. spring
      3. 其他
  3. 准备

    1. 验证工具

      1. YAML、YML在线格式化校验工具

        1. 一个 YAML 转换 JSON 的工具

          1. 通常来说, YAML 是可以转化为 JSON 的
          2. 有一个能告诉你对错的验证工具, 对学习很有帮助
        2. 这里如果使用 广告屏蔽插件的化, 背景会变得不太好看

          1. 处理办法, 是把 body 元素里的 style 属性去掉即可
    2. JSON 的基础

      1. 起码知道 map, list 的表示

1. YAML

  1. 概述

    1. 简述 YAML 相关
  2. 什么是 YAML

    1. YAML ain't markup language

      1. YAML 不是标记语言
      2. 这个玩法, 和 gnu 有点类似...
  3. 目的

    1. 一门 可读性好 的语言
    2. 一门可以作为 数据序列化标准 的语言
    3. 一门 跨平台 的语言
  4. 和 JSON 的关系

    1. JSON 更加注重 跨平台, YAML 更重视可读
    2. YAML 可以视为 JSON 的超集
      1. JSON 的格式, 在 YAML 中合法
  5. 后缀名到底是 .YAML 还是 .yml

    1. 都行
    2. 推荐使用 .YAML

2. 语法

  1. 概述

    1. 简单介绍 YAML 语法

1. 普通文本

  1. 概述

    1. 尝试输入普通文本
  2. 例子

    # 输入
    1
    2
    3 4
    # 转换
    '1 2 3\n4'
  3. 我的想法

    1. 虽然转换成功, 但是不建议使用

      1. 为啥非要用 YAML 来存放普通文本呢

2. 注释

  1. 概述

    1. YAML 的注释
  2. 注释格式

    1. 开始

      1. 以 # 开头
    2. 位置

      1. 行首

        1. 整行都被视为注释
      2. 行中
        1. 符号 # 右侧的字符, 被视为注释
    3. 格式

      1. 符号 # 和注释内容之间, 需要 空格 隔开
  3. 约定

    1. 我在后面整理中, 不会在 YAML 里添加任何注释
    2. 下文中的 # 只是用来分隔的 解释说明文字

3. 简单 map

  1. 概述

    1. 简单 map

例子1: kv 分隔符

  1. 示例

    # 输入
    1:1
    # 输出
    61
  2. 结果

    1. 卧槽怎么是这个东西?
  3. 原因

    1. : 格式有问题

    2. 可用的格式, 有这两种

      # 官网推荐这一种, : 紧跟key, 但是在 value 前面, 有一个空格
      1: 1
      2 : 2
    3. 后面一定注意, YAML 其实 很吃 格式

      1. 格式很重要
  4. 修正

    # 输入
    1: 1
    # 输出, 这就对了嘛
    { '1': 1 }

例子2: 简单的 map

  1. 示例

    # 输入
    1: 10
    abandon: 狂热
    # 输出
    { '1': 10, abandon: '狂热' }
  2. 结果

    1. 数字 和 字母都能作为 key

      1. 而且比起 JSON, YAML 的格式好像更为简单

        1. 起码 '' 的使用, 没有那么复杂

其他注意的问题

  1. 概述

    1. 一些其他的注意事项
    2. 本来想 举例子 来说, 但还是太懒了
  2. 字符集

    1. YAML 支持 unicode 的所有可见字符集
  3. 特殊字符

    1. 如果需要 #, :, 则可以用 '' 或者 "" 引用, 保证使用正常

      1. 那个转化器, 无法识别 "", 这个暂时没法验证
  4. key 不能重复

    1. 重复的 key, 会导致 解析失败
  5. key 不能为空

    1. 否则会导致 解析失败

      1. 单纯的 空格 和 tab 也不行
      2. 空字符串, 倒是没问题
  6. value 可以为空

    1. 转换出来的 JSON, 会识别为 null
    2. 如果是文字 null, 则加上 ''
  7. 数字值域

    1. 使用 11111111111111111111 做 键 时

      1. 转化后的 键 为 11111111111111110000
      2. 不知道是因为解析器使用 js 的原因, 还是其他原因
    2. 在使用数字的时候, 要有意识的去注意 值域

  8. bool

    1. YAML 支持 bool 类型

      1. true, True
      2. false, False

4. 简单 list

  1. 概述

    1. 简单 list

例子1: 简单 list

  1. 示例

    # 输入
    -
    - ' '
    - ' '
    - 1
    - abandon
    # 输出
    [ null, ' ', '\t', 1, 'abandon' ]
  2. 结果

    1. 值可以为空
    2. 空格 和 tab 必须用 '' 或者 ""
      1. 否则视为 null
      • 和 值 之间, 必须要有 空格
    3. 友情提示: 注意对齐, 后面的缩进, 会有大麻烦

5. 嵌套

  1. 概述

    1. 尝试一些相对复杂的嵌套

例子1: map 嵌套

  1. 示例

    # 输入
    key1:
    key11: value11
    key12: value12
    key2:
    key11: value11
    key12: value12
    # 输出
    { key1: { key11: 'value11', key12: 'value12' },
    key2: { key21: 'value21', key22: 'value22' } }
  2. 结果

    1. map 可以作为 value
  3. 注意

    1. 缩进

      1. YAML 中, 层次是靠 缩进 体现的
      2. 缩进使用的, 是 两个空格
      3. 一定不能用 tab 去缩进
      4. 缩进不正确, 会导致报错
    2. 当然, 可以多层嵌套

      1. 但具体能嵌套多少层, 我也是不清楚

例子2: list 嵌套

  1. 示例

    # 输入
    - super1
    -
    - sub1
    - sub2
    - super3
    # 输出
    [ 'super1', [ 'sub1', 'sub2' ], 'super3' ]
  2. 结果

    1. list 可以作为 list 元素存在

      1. 那个空行 - 需要注意
  3. 注意

    1. 还是缩进
    2. 层数
      1. 可以多层嵌套
      2. 但是能套多少层, 我还是不清楚

例子3: list 做 map 的 key

  1. 示例

    # 输入
    ?
    - var1
    - var2
    :
    key
    # 输出
    { 'var1,var2': 'key' }
  2. 结果

    1. list 作为 map 的 key, 成功转化
  3. 注意

    1. 注意格式

      1. ?
      2. :
    2. map 不能作为 map 的 key

例子4: list 作为 map 的 value

  1. 示例

    # 输入
    key:
    - value1
    - value2
    # 输出
    { key: [ 'value1', 'value2' ] }
  2. 结果

    1. 成功

例子5: map 作为 list 的元素

  1. 示例

    # 输入
    - key10: value10
    key11: value11
    - key20: value20
    key21: value21
    # 输出
    [ { key10: 'value10', key11: 'value11' },
    { key20: 'value20', key21: 'value21' } ]
  2. 结果

    1. 成功嵌套

6. 其他

  1. 感觉了解了这些, 基本就够用了吧

    1. 感觉日常使用, 基本是 够了
  2. 当然有一些疑问

    1. 层数上限
    2. 容量上限
    3. int 和 float 的上限
    4. 特殊转义
    5. " 和 ' 的区别
  3. 这些问题, 如果在使用中遇到, 再去处理吧

  4. 感觉 YAML 其实是一种 写起来更简单的 JSON

    1. 如果有想法的话, 其实是可以写一个东西, 来将 YAML 转化为 JSON 的

ps

  1. ref

    1. YAML
    2. What is the difference between .yaml and .yml extension?
    3. YAML、YML在线格式化校验工具

其他 - YAML 入门的更多相关文章

  1. YAML入门

    概要 YAML(是YAML Ain't Markup Language的缩写,尾音的发音类似Camel)是一种序列化数据的语言(类似json, xml),使用轻量高可读性的语法描述list, dict ...

  2. 04 . kubernetes资源清单YAML入门

    YAML 通过k8s操作yaml配置文件在node上创建资源,yaml配置文件就像船垛,用来操控docker这艘大船 yam是专门用来写配置文件的语言,非常简洁和强大.而实际上使用yaml配置文件创建 ...

  3. YAML简要入门

    这是一篇简单的YAML入门教程,目的是让你知晓什么YAML,以及YAML的基础语法.方便接下来学习如何使用Golang解析YAML.如果想获得更多YAML的知识,请查看http://yaml.org ...

  4. YAML 语言教程(转载)

    用YAML语言读取配置是最快的,之前的suricata中用yaml读取了配置,并且在代码运行期间,对配置进行了维护,所以抽点时间,来了解一下YAML语言编程,下文虽然对YAML语言和JAVAScrip ...

  5. python基础知识-day9(数据驱动)

    1.数据驱动的概念 在自动化测试中,需要把测试的数据分离到JSON,YAML等文件中. 2.YAML 的相关知识 YAML 入门教程 分类 编程技术 YAML 是 "YAML Ain't a ...

  6. SpringBoot 配置文件使用详解

    一.创建一个SpringBoot项目 创建 SprintBoot 项目的 2 种方式: 在 https://start.spring.io/ 上创建一个 SpringBoot 项目,然后导入到 IDE ...

  7. YAML快速入门

    https://www.jianshu.com/p/97222440cd08 我们学习Java,都是先介绍properties文件,使用properties文件配合Properties对象能够很方便的 ...

  8. [转帖] YAML 快速入门

    https://www.jianshu.com/p/97222440cd08 原始文档更加易读. YAML快速入门 叩丁狼教育 关注 2018.02.18 19:19* 字数 1776 阅读 876评 ...

  9. YAML文件格式入门

    YAML快速入门 https://www.jianshu.com/p/97222440cd08 https://yaml.org/spec/1.2/spec.pdf http://nodeca.git ...

随机推荐

  1. python—lambda函数,三个常用的高阶函数

    """lambda 参数列表 : 返回值lambda 参数形式: 1.无参数:lambda:100 2.一个参数:lambda a: a 3.默认参数:lambda a, ...

  2. JavaScript自学笔记(3)--- 用JS来实现网页浮窗

    最近做个小项目,给网页加个浮窗,考验了基础的css,js技术,还是蛮有意思的,代码如下(部分代码来源于引用,见底部) <!DOCTYPE html> <html> <he ...

  3. Spring的BeanFactory和FactoryBean

    官方定义 BeanFactory:Spring Bean容器的根接口 FactoryBean:各个对象的工厂接口,如果bean实现了这个接口,它将被用作对象的工厂,而不是直接作为bean实例. 源码解 ...

  4. cisco 添加静态路由

    静态路由:由人,手动写出的路由条目就叫静态路由,永久有效,优先级最高,效率最高. 路由器是干啥的? 连接不同地址段的网络.屏蔽不同地址段的网络广播. 路由器有多个接口,至少得有2个吧,一边一个局域网. ...

  5. Spring MVC 定时任务注解说明

    一.注解说明. Spring 自带的定时任务执行@Scheduled注解,可以定时的.周期性的执行一些任务.查看@Scheduled的注解可以看到有以下三种: 1.1 String cron() de ...

  6. 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model

    Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的. 而面向外部的 model 则表示了要传输的东西.这类 model 有时候叫做 Dto,有时 ...

  7. 数据库中间件DBLE学习(一) 基础介绍和快速搭建

    dble基本架构简介 dble是上海爱可生信息技术股份有限公司基于mysql的高可用扩展性的分布式中间件.江湖人送外号MyCat Plus.开源地址 我们首先来看架构图,外部应用通过NIO/AIO进行 ...

  8. @Autowired、@Resource、@Qualifier区别

    @Autowired 1.属于spring的注解,如果不想和Spring耦合的太紧,就不推荐使用. 2.默认情况下,要求依赖对象必须存在,不能为null.如果允许为空,那么设置属性值required为 ...

  9. PAT (Basic Level) Practice (中文)1082 射击比赛 (20 分)

    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...

  10. ASP.NET MVC中ActionResult的不同返回方式

    1.返回视图 return View();//返回方法名对应的视图 return View("aaa");//返回名称为aaa的视图 2.返回文本内容 return Content ...