飞道的博客

文件(一)[YAML]

408人阅读  评论(0)


JSON和YAML文件转换及校验工具:

https://oktools.net/json2yaml

YAML校验和简化测试:

http://www.yamllint.com/

1.基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
  • 字符串可以不使用英文 双引号 / 单引号 囊括。

2.数据类型

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

1.对象

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

name: "张三" 
age: 18
# 或者
{name: "张三",age: 18}

或者

name: '张三'
age: 18
# 或者
{name: '张三',age: 18}

或者

name: 张三 
age: 18
# 或者
{name: 张三,age: 18}

对应JSON:

{
  "age": 18,
  "name": "张三"
}

缩进表示层级关系
例:

info: 
  age: 18
  name: 张三

对应JSON:

{
  "info": {
    "age": 18,
    "name": "张三"
  }
}

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

? 
  - name
  - age
: 
  - 张三
  - 18

对应JSON:

{
  "name,age": [
    "张三",
    18
  ]
}

意思即对象的属性是一个数组 [name,age],对应的值也是一个数组 [张三,18]

2.数组

1.普通数组

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

- a
- b
- 100

对应JSON:

[
  "a",
  "b",
  100
]

2.多维数组

数据结构的子成员是一个数组,则可以缩进一个空格来标识

- 
 - 张三
 - 18 
-
 - 李四
 - 20
[
  [
    "张三",
    18
  ],
  [
    "李四",
    20
  ]
]

例:

students: 
  - 
    id: 1
    name: 张三
    score: 98.5
  - 
    id: 2
    name: 李四
    score: 99     

或者

students: [{id: 1,name: 张三,score: 98.5},{id: 2,name: 李四,score: 99}]

对应JSON:

{
  "students": [
    {
      "id": 1,
      "name": "张三",
      "score": 98.5
    },
    {
      "id": 2,
      "name": "李四",
      "score": 99
    }
  ]
}

3.复合结构

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

tag:
  - Class
  - AVG
  - Max
info:
  Class: 三班 
  AVG: 86.5 
  Max: 99.5 
  Count: 60

对应JSON:

{
  "tag": [
    "Class",
    "AVG",
    "Max"
  ],
  "info": {
    "Class": "三班",
    "AVG": 86.5,
    "Max": 99.5,
    "Count": 60
  }
}

3.纯量

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

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

1.字符串

字符串可以不使用英文 双引号 / 单引号 囊括。
字符串可以拆成多行,每一行会被转化成一个空格。
例:

name: 张三
address: "上海"
nickname: 'honey'
detail: 中国
 北京
 北京市
 通天苑小区

对应JSON:

{
  "name": "张三",
  "address": "上海",
  "nickname": "honey",
  "detail": "中国 北京 北京市 通天苑小区"
}

2.布尔值

例:

is_teacher: false
is_docker: FALSE
is_student: False
is_cook: true
is_editor: TRUE
is_farmer: True

对应JSON:

{
  "is_teacher": false,
  "is_docker": false,
  "is_student": false,
  "is_cook": true,
  "is_editor": true,
  "is_farmer": true
}

3.整数

二进制使用0b开头
八进制使用0开头
十六进制使用0x开头
十进制直接书写
科学计数法直接使用

例:

# 十进制
a: 18
# 二进制	
b: 0b10010
# 八进制	
d: 022
# 十六进制	
e: 0x12
# 科学计数法
f: 1.8E3
g: 1.8e3

对应JSON:

{
  "a": 18,
  "b": 18,
  "d": 18,
  "e": 18,
  "f": 1800,
  "g": 1800
}

4.浮点数

例:

a: 3.14
b: 1.5E-5

对应JSON:

{
  "a": 3.14,
  "b": 0.000015
}

5.Null

例:

a: ~  #使用~表示null

对应JSON:

{
  "a": null
}

6.时间

例:

time: 2020-04-21T14:13:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

对应JSON:

{
  "time": "2020-04-21T06:13:31.000Z"
}

7.日期

例:

a: 2020-04-21 # 日期必须使用ISO 8601格式,即yyyy-MM-dd
b: 2020-4-21 # 日期必须使用ISO 8601格式,即yyyy-MM-dd
c: 2020/04/21 # 变成字符串
d: 04/21/2020 # 变成字符串

对应JSON:

{
  "a": "2020-04-21T00:00:00.000Z",
  "b": "2020-4-21",
  "c": "2020/04/21",
  "d": "04/21/2020"
}

3.引用

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

# 默认配置
default: &default
 ip: 127.0.0.1
 port: 8080
# 开发环境
development:
  database: mysql
  <<: *default
# 生产环境
product:
 database: 
  - mysql
  - oracle
# 测试环境
test:
  database: mysql
  <<: *default

等价于

# 默认配置
default: 
  ip: "127.0.0.1"
  port: 8080
# 开发环境
development: 
  database: mysql
  ip: "127.0.0.1"
  port: 8080
# 生产环境
product: 
  database: 
    - mysql
    - oracle
# 测试环境
test: 
  database: mysql
  ip: "127.0.0.1"
  port: 8080

对应JSON:

{
  "default": {
    "ip": "127.0.0.1",
    "port": 8080
  },
  "development": {
    "database": "mysql",
    "ip": "127.0.0.1",
    "port": 8080
  },
  "product": {
    "database": [
      "mysql",
      "oracle"
    ]
  },
  "test": {
    "database": "mysql",
    "ip": "127.0.0.1",
    "port": 8080
  }
}

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

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

对应JSON:

[
  "Steve",
  "Clark",
  "Brian",
  "Oren",
  "Steve"
]

转载:https://blog.csdn.net/weixin_42366378/article/details/105655421
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场