关于yaml文件的学习

   YAML配置文件,之间在一些代码工程和python学习中接触过,但是一直没有弄明白这是一种什么样的文件和标记语言,今天就开始学下,以下内容是摘自网上:

YAML(Yet Another Markup Language)(发音 /ˈjæməl/ )
 一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言。

适应场景 脚本语言:由于实现简单,解析成本很低,YAML 特别适合在脚本语言中使用 序列化: YAML是由宿主语言数据类型直转,的比较适合做序列化。 配置文件:写 YAML 要比写 XML 快得多(无需关注标签或引号),并且比 INI 文档功能更强。由于兼容性问题,不同语言间的数据流转建议不要用 YAML。 语言优点 YAML易于人们阅读。 YAML数据在编程语言之间是可移植的。 YAML匹配敏捷语言的本机数据结构。 YAML具有一致的模型来支持通用工具。 YAML支持单程处理。 YAML具有表现力和可扩展性。 YAML易于实现和使用。 YAML 语法 使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱) ‘#’表示注释,只能单行注释,从#开始处到行尾 破折号后面跟一个空格(a dash and space)表示列表 用冒号和空格表示键值对 key: value 简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符 Sequence of Scalars  简单数据列表

- Mark McGwire - Sammy Sosa - Ken Griffey

Mapping Scalars to Scalars 简单数据键值对以及注释

hr: 65 # Home runs avg: 0.278 # Batting average rbi: 147 # Runs Batted 
Mapping Scalars to Sequences 简单数据列表键值对
american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves

Sequence of Mappings 键值对列表 

- name: Mark McGwire hr: 65 avg: 0.278 - name: Sammy Sosa hr: 63 avg: 0.288
YAML 还支持流类型,用中括号括起来表示列表,用逗号分隔元素;用大括号括起来表示键值对,用逗号分隔元素。 
Sequence of Sequences 列表的列表 
- [name , hr, avg ] - [Mark McGwire, 65, 0.278] - [Sammy Sosa , 63, 0.288]

 Mapping of Mappings  键值对的键值对

Mark McGwire: {hr: 65, avg: 0.278} Sammy Sosa: { hr: 63, avg: 0.288 }

适应场景

脚本语言:由于实现简单,解析成本很低,YAML 特别适合在脚本语言中使用
序列化: YAML是由宿主语言数据类型直转,的比较适合做序列化。
配置文件:写 YAML 要比写 XML 快得多(无需关注标签或引号),并且比 INI 文档功能更强。由于兼容性问题,不同语言间的数据流转建议不要用 YAML。
语言优点

YAML易于人们阅读。
YAML数据在编程语言之间是可移植的。
YAML匹配敏捷语言的本机数据结构。
YAML具有一致的模型来支持通用工具。
YAML支持单程处理。
YAML具有表现力和可扩展性。
YAML易于实现和使用。
YAML 语法

使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱)
‘#’表示注释,只能单行注释,从#开始处到行尾
破折号后面跟一个空格(a dash and space)表示列表
用冒号和空格表示键值对 key: value
简单数据(scalars,标量数据)可以不使用引号括起来,包括字符串数据。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用C风格的转义字符
--------------------- 
作者:beginya 
来源:CSDN 
原文:https://blog.csdn.net/beginya/article/details/76768968 
版权声明:本文为博主原创文章,转载请附上博文链接!

1、基本语法
格式要求
k:(空格)v:表示一对键值对(空格必须有);空格的个数不重要,只要相同层级的元素左对齐即可

空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:
    port: 8081
    path: /hello
  • 属性和值也是大小写敏感;

2、值的写法

字面量:普通的值(数字,字符串,布尔)

​ k: v:字面直接来写;

​ 字符串默认不用加上单引号或者双引号;

​ “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

​ ”:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对):

​ k: v:在下一行来写对象的属性和值的关系;注意缩进

​ 对象还是k: v的方式

friends:
        lastName: zhangsan
        age: 20
  • 1
  • 2
  • 3

行内写法:

friends: {lastName: zhangsan,age: 18}
  • 1

数组(List、Set):

用- 值表示数组中的一个元素

pets:
 - cat
 - dog
 - pig
  • 1
  • 2
  • 3
  • 4

行内写法

pets: [cat,dog,pig]
  • 1

1、@controller 控制器(注入服务)
2、@service 服务(注入dao)
3、@repository dao(实现dao访问)
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的)

@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
prefix = “person”:配置文件中哪个下面的所有属性进行一一映射

二、yaml语法
1、基本规则


 1. 大小写敏感
 2. 使用缩进表示层级关系
 3. 缩进时不允许使用Tab,只允许使用空格
 4. 缩进的空格数目不重要,只要相同层级的元素左对齐即可
 5. # 表示注释,从它开始到行尾都被忽略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、yaml转字典
yaml中支持映射或字典的表示,如下:

# 下面格式读到Python里会是个dict
name: 灰蓝
age: 0
job: Tester
  • 1
  • 2
  • 3
  • 4

输出:

{'name': '灰蓝', 'age': 0, 'job': 'Tester'}
  • 1

3、yaml转列表
yaml中支持列表或数组的表示,如下:

# 下面格式读到Python里会是个list
- 灰蓝
- 0
- Tester
  • 1
  • 2
  • 3
  • 4

输出:

['灰蓝', 0, 'Tester']
  • 1

4、复合结构:
字典和列表可以复合起来使用,如下:

# 下面格式读到Python里是个list里包含dict
- name: 灰蓝
  age: 0
  job: Tester
- name: James
  age: 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出:

[{'name': '灰蓝', 'age': 0, 'job': 'Tester'}, {'name': 'James', 'age': 30}]
  • 1

5、基本类型:
yaml中有以下基本类型:

字符串
整型
浮点型
布尔型
null
时间
日期
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

我们写个例子来看下:

# 这个例子输出一个字典,其中value包括所有基本类型
str: "Hello World!"
int: 110
float: 3.141
boolean: true  # or false
None: null  # 也可以用 ~ 号来表示 null
time: 2016-09-22t11:43:30.20+08:00  # ISO8601,写法百度
date: 2016-09-22  # 同样ISO8601
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出:

{'str': 'Hello World!', 'int': 110, 'float': 3.141, 'boolean': True, 'None': None, 'time': datetime.datetime(2016, 9, 22, 3, 43, 30, 200000), 'date': datetime.date(2016, 9, 22)}
  • 1

如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了

str: 灰蓝
str1: "Hello World"
str2: "Hello\nWorld"
  • 1
  • 2
  • 3

输出:

{'str': '灰蓝', 'str1': 'Hello World', 'str2': 'Hello\nWorld'}
  • 1

这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被Python转义,到最后是输出了特殊字符;如:

str1: 'Hello\nWorld'
str2: "Hello\nWorld"
  • 1
  • 2

输出:

{'str1': 'Hello\\nWorld', 'str2': 'Hello\nWorld'}
  • 1

可以看到,单引号中的’\n’最后是输出了,双引号中的’\n’最后是转义成了回车
6、引用
& 和 * 用于引用

name: &name 灰蓝
tester: *name
  • 1
  • 2

这个相当于一下脚本:

name: 灰蓝
tester: 灰蓝
  • 1
  • 2

输出:

{'name': '灰蓝', 'tester': '灰蓝'}
  • 1

7、强制转换
yaml是可以进行强制转换的,用 !! 实现,如下:

str: !!str 3.14
int: !!int "123"
  • 1
  • 2

输出:

{'int': 123, 'str': '3.14'}
  • 1

明显能够看出123被强转成了int类型,而float型的3.14则被强转成了str型。
8、分段
在同一个yaml文件中,可以用 — 来分段,这样可以将多个文档写在一个文件中

---
name: James
age: 20
---
name: Lily
age: 19

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值