JSON和YAML文件转换及校验工具:
https://oktools.net/json2yaml
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
查看评论