YAML

17th October 2020 at 8:00am
Structured Data: Text Format

YAML 的具体语法,可以参考下面的资源链接。这里给一些快速的示例,以及描述 YAML 的能力。

YAML 目前主流是 1.2 版本(2009 年),1.3 版本在讨论中(2017 年开始)。

Scalar Types

Language Independent Scalar types:
    { ~, null }                  : Null (no value).
    [ 1234, 0x4D2, 02333 ]       : [ Decimal int, Hexadecimal int, Octal int ]
    [ 1_230.15, 12.3015e+02 ]    : [ Fixed float, Exponential float ]
    [ .inf, -.Inf, .NAN ]        : [ Infinity (float), Negative, Not a number ]
    { Y, true, Yes, ON  }        : Boolean true
    { n, FALSE, No, off }        : Boolean false
    2001-12-14t21:59:43.10-05:00 : Date time value in ISO8601
    1976-07-31                   : Date value in ISO8601
    "Hello\nWorld"               : String literal with escaping (\n would be turned into new line)
    'Hello\nWorld'               : String literal without escaping

强制类型转换 !!

e: !!float 123
f: !!str true 

Basics

Array:

- apple
- banana
- carrot

Hash:

foo: whatever
bar: stuff

Complex mixed mapping:

foo: whatever 
bar: 
 - 
   fruit: apple 
   name: steve 
   sport: baseball 
 - more 
 - 
   python: rocks 
   perl: papers 
   ruby: scissorses 

In Ruby:

{ 'foo' => 'whatever',  
  'bar' => [ 
    { 
        'fruit' => 'apple',  
        'name' => 'steve', 
        'sport' => 'baseball' 
    }, 
    'more', 
    { 
        'python' => 'rocks', 
        'perl' => 'papers', 
        'ruby' => 'scissorses' 
    } 
  ] 
}

Flow Mode (Inline Mode)

seq:
  - a
  - b
  - c

# The same with above
seq: [a, b, c]
hash:
  name: Steve
  foo: bar

# The same with above
hash: { name: Steve, foo: bar } 

多行字符串,用 | > 两个符号,规则啰嗦,不展开讲。一般来说用 | 会保留你的换行,> 倾向于合并。看看 StackOverflow 的 回答

&, << 可以用来合并一个 mapping 到另外一个 mapping。

一般 YAML 文件格式中会带个头 %YAML 1.2--- 作开始,... 作结尾。但是这些符号可有可无,parser 一般不作强制要求:

%YAML 1.2
---
# Your content
...

工具

  • Online YAML Parser 提供了一个 YAML 的 playground,有不确定的语法时在这上面试试

参考