YAML学习笔记

YAML
简介
  YAML是一种数据序列化语言,包含具有重要构造的标记语言,以区分面向数据的语言和文档标记。

创建YAML文件的规则
  在创建yaml文件时,有以下规则:
    1、YAML区分大小写;
    2、使用.yaml或.yml作为扩展名;
    3、yaml在创建yaml文件时不允许使用制表符,只允许使用空格;
    4、使用缩进代表层级关系;
    5、使用“#”注释,仅支持单行注释

基本组件
  常规块格式
    使用连字符(“-”)+空格开始指定列表中的新项目;
    例:--- # Favorite
       - Fly House
       - zyxywy
  內联格式
    用逗号和空格分隔,每个项目用JSON括起来;
    例:--- # list
       [Fly House,zyxywy]
  折叠文本
    将换行符转换为空格并删除前导空格;
    例:- {name: zyxy wy, age: 33}
       - name: aaron Yin
           age: 27
    #前导空格 就是在字符串最开始部分的空格 从字符串开头,到第一个不是空格的元素,中间所有的空格是前导空格
    #尾随空格, 就是结尾最后一个非空格元素,到结尾,中间所有的空格。
    
基本要素简介:
    1、注释以#开头
    2、通过空格将注释和其他标记分开
    3、空白的缩进用于表示结构
    4、标签不包含在yaml文件的缩进中
    5、列表成员用前导连字符(-)表示
    6、列表成员用方括号括起来,并以逗号分隔
    7、关联数组使用冒号(:)以键值对的格式表示,用大括号括起来
    8、具有单个流的多个文档用(---)分隔
    9、每个文件中的重复节点最初用"&"表示,后面用星号“*”标记
    10、节点标有感叹号(!)或双重感叹号(!!),后面跟字符串,可以扩展URI或URL
    11、列表分隔符冒号或逗号后面带有空格

数据类型
  对象:键值对的集合,又称映射mapping、哈希hashes、字典dictionary
  数组:一组按次序排列的值,又称序列sequence、列表list
  纯量(scalars):单个的、不可再分的值

    对象:
    结构:[key: value]     #冒号后有个空格
         key:{key1: value1,key2: value2,...}    
    缩进表示层级关系:
         key:
        child-key: value
        child-key2: value2
    复杂的对象格式:问号?加空格代表一个复杂的key,冒号:加空格表示一个value
         ?
        - key1
        - key2
         :
        - value1
        - value2
        #表示一个对象,属性是数组[key1,key2],值是[value1,value2]
    数组:
    以连字符(-)开头的行表示构成一个数组:
        例:- abc
           - efg
           - hij
    支持多维数组,可以使用行内表示:
        格式:key: [value1, value2, ...]
            缩进格式:
            -
              - abc
              - efg
              - hij

        例:
        companies:
          -
            id: 1
            name: company1
            price: 200W
          -
            id: 2
            name: company2
            price: 500w
        #流式(flow)表示:companies: [{id: 1,name: company1,price: 200w},{id: 2,name: company2,price: 500w}]

    复合结构:
    数组和对象可以构成复合结构:
    languages:
      - Ruby
      - Perl
      - Python
    websites:
      YAML: yaml.org
      Ruby: ruby-lang.org
      Python: python.org
      Perl: usr.perl.org
       #JSON格式:
    {
     languages: ['Ruby', 'Perl', 'Python'],
     websites: {
      YAML: 'yaml.org',
      Ruby: 'ruby-lang.org',
      Python: 'python.org',
      Perl: 'usrl.perl.org'
        }
    }

    纯量:
    最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点数、Null、时间、日期
    例:
    boolean:
      - TRUE        #true,True表示也可以
      - FALSE        #false,False
    float:
      - 8.26
      - 6.246236e+5
    int:
      - 123
      - 0b1010_0111_0100_1010_1110    #二进制
    null:
      nodeNmae: 'node'
      parent: ~        #"~"表示null
    string:
      - 'hello yaml'    #双引号或单引号包含特殊字符
      - newline        #字符串可以拆成多行,每一行的换行符和前导空格会被转化成一个空格
        newline2
      - 钟声
    date:
      - 2019-12-17        #日志格式必须为yyyy-MM-dd
    datetime:
      - 2019-12-17T15:30:30+08:00    #日期和时间使用T连接,使用“+”代表时区

    引用:
    &锚点和< span class="marked">*别名,可以用来引用:
    例1:
    example: &example    #“&” 用来建立锚点,“<<”表示合并到当前数据,“*” 用来引用锚点
      adapter: postgres
      host: localhost
    test:
      database: myapp_test
      <<: *example
    相当于
    example: &example
      adapter: postgres
      host: localhost
    test:
      database: myapp_test
      adapter: postgres
      host: localhost
                  
    例2:    
    - &example2 steve
    - aaron
    - *example2
    相当于    
    ['steve', 'aaron', 'steve']
   

posted @ 2020-04-08 21:29  zyxywy  阅读(226)  评论(0编辑  收藏  举报