您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > HTML

告别xml,一起yaml,让配置文件更简洁流畅

时间:2021-06-21 09:53:00  来源:  作者:爱读书的程序员

背景

日常工作中,项目编程免不了需要使用配置文件,早期yaml出现之前,大部分配置文件采用xml形式,但是以xml格式储存的数据要比以其他格式(如json、yaml)储存占有的空间要大得多,因为它除了要保存原始数据外还需要保存元数据进行描述。不管你是否相信,笔者曾经在项目中看到xml文件中大量冗余的标签,真的是眼花缭乱,幸运的是,当看见yaml的那一刻,笔者真实地感受到上帝来解救处于水深火热中的那一帮经常与配置文件打交道的程序员了。本文笔者将根据在项目中对yaml的应用简单介绍yaml这样一种让爱程序员爱不释手的数据串行化格式。

简介

与json、xml一样,yaml也是一种通用的数据串行化格式,其设计目标就是方便开发人员的读写,yaml可以表示对象、数组、纯量三种数据格式。

yaml规范

  • 大小写敏感
  • 使用缩进表示层级
  • 缩进的空格数不重要,但是相同层级的元素左侧需要对齐

对象

键值对组合,又称哈希,对象的一组键值对用冒号分割,注意冒号后面必须有空格

debug: true

转换为JAVAScript如下

{"debug":true}

也可以将所有键值对写在一个行内对象

db: {user: root, password: pass123}

转换为JavaScript如下

{"db":{"user":"root", "password":"pass123"}}

数组

一组按次序排列的值,又称序列,数组的每个元素都以连词线“-”开头,连词线“-”后面必须有空格,如下

fruits:
 - Apple
 - pear
 - banana

转换为JavaScript后如下

{"fruits": ["apple", "pear", "banana"]}

也可以表示多维数组,如下

fruitsGroup:
 - 
  - apple
  - banana
 -
  - pear

转换为JavaScript如下

{"fruitsGroup": [["apple", "banana"], ["pear"]]}

与对象一样,数组也可以使用行内表示法,如下

fruits: [apple, banana, pear]

转换为JavaScript如下

{"fruits":["apple", "banana", "pear"]}

复合结构

对象和数组可以结合使用,构成复合结构。如对象数组,每个对象的第一个属性以连词线“-”开头,连词线“-”后面必须要有空格

fruits:
 - name: apple
   color: red
 - name: banana
   color: yellow

转换成JavaScript如下

{"fruits":[{"name":"apple", "color":"red"}, {"name":"banana", "color":"yellow"}]}

对象数组也可以使用行内表示法,如下

fruits: [{"name":"apple", "color":"red"}, {"name":"banana", "color":"yellow"}]

转换为JavaScript如下

{"fruits":[{"name":"apple", "color":"red"}, {"name":"banana", "color":"yellow"}]}

纯量

纯量是单独的、最基本的、不可再分的值,包括数值类型(整数、浮点数)、布尔类型、日期时间类型、null类型,字符串类型。

数值直接以字面量的形式表示,如下

weight: 1.0

转换为JavaScript如下

{"weight": 1.0}

布尔值包括true与false,如下

enabled: true
disabled: false

转换为JavaScript如下

{"enabled":true, "disabled":false}

null用~表示,如下

name: ~

转换为JavaScript如下

{"name": null}

日期、时间采用ISO8601格式,如下

date: 2021-06-18T18:00:00+08:00
date1: 2020-06-18

转换为JavaScript如下

{"date": new Date('2021-06-18T18:00:00+08:00'), "date1":new Date('2020-06-18')}

字符串

字符串默认不使用引号,如下

profile: test

如果字符串中包含特殊字符或空格,需要放在引号之中,其中单引号不会对特殊字符转义,双引号会对特殊字符转义,如下

c1: '这是一个n测试'
c2: "这是一个n测试"

转换为JavaScript如下

{"c1":"这是一个\n测试", "c2":"这是一个n测试"}

单引号之中如果还有单引号,需要连续使用两个单引号转义,如下

content: 'that''s all right'

转换为JavaScript如下

{"content": "that's all right"}

字符串可以写成多行,从第二行开始,每一行必须以空格缩进,换行会被转换成空格,如下

content: this
 is
 test

转换为JavaScript如下

{"content": "this is test"}

多行字符串可以使用"|"保留换行符,或者使用">"折叠换行符,如下

c1: |
 thank
 you
  
c2: >
 thank
 you
  

转换成JavaScript如下

{'c1': 'thanknyoun', 'c2': 'thank youn'}

"|"后面使用"+"可以保留字符串末尾的换行(默认只保留字符串末尾的第一个换行),"-"可以删除字符串末尾的换行,如下

c1: |+
 thank
 you
  
c2: |-
 thank
 you
  

转换成JavaScript如下

{'c1': 'thanknyounn', 'c2': 'thank you'}

引用

可以使用锚点"&"和别名"*"来使用yaml中的引用功能,其中"&"用于定义锚点,别名"*"用来引用锚点,如下,"<<"表示合并到当前数据

common: &common
 user: zhangsan
 password: 123456
test:
 profile: test
 <<: *common
dev:
 profile: dev
 <<: *common

等价于下面

common: &common
 user: zhangsan
 password: 123456
test:
 profile: test
 user: zhangsan
 password: 123456
dev:
 profile: dev
 user: zhangsan
 password: 123456

类似的,纯量也可以使用锚点,如下

- &fruit apple
- banana
- pear
- *fruit

转换为JavaScript如下

['apple', 'banana', 'pear', 'apple']

总结

从上面的案例可以看出yaml相对于传统的xml更简洁,可读性更强,目前笔者所在的项目基本全部采用yaml格式的配置文件,看起来清爽多了。关于yaml的相关用法,读者朋友如果有更多的认识,欢迎文章下方评论,共同学习共同进步。



Tags:yaml   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
背景日常工作中,项目编程免不了需要使用配置文件,早期yaml出现之前,大部分配置文件采用xml形式,但是以xml格式储存的数据要比以其他格式(如json、yaml)储存占有的空间要大得多,因为...【详细内容】
2021-06-21  Tags: yaml  点击:(265)  评论:(0)  加入收藏
现在越来越多的开源软件在配置文件中都使用了YAML格式,这种格式文件去除了引号以及各种括号,看起来语法更加精炼。究其原因,YAML格式用更少的语法来表达丰富的含义。YAML是一个...【详细内容】
2020-04-13  Tags: yaml  点击:(51)  评论:(0)  加入收藏
实际项目中,还有一个比较重要的基础功能,就是读取相关的配置文件。今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的。1. json使用JSON 应该比较熟悉,它是一种轻量...【详细内容】
2019-09-02  Tags: yaml  点击:(256)  评论:(0)  加入收藏
▌简易百科推荐
此文由掘金@天行天忌授权发布,前端晚间课对其内容进行微改。 HTML,超文本标记语言,是一种用于创建网页的标准标记语言。自从引入 HTML 以来,它就一直用于构建互联网。与 JavaScr...【详细内容】
2021-11-23  前端晚间课    Tags:HTML6   点击:(322)  评论:(0)  加入收藏
HTML是什么?超文本标记语言(Hyper Text Markup Language),标准通用标记语言下的一个应用。HTML 不是一种编程语言,而是一种标记语言 (markup language),是网页制作所必备的。“...【详细内容】
2021-11-05  人生三部曲丶    Tags:HTML   点击:(40)  评论:(0)  加入收藏
一、iframe标签 自己编写的页面中如果要引用外部的页面的话,可以使用iframe标签来实现。为了更好地理解举个例子,前面几篇中我们都是在index.hmtl中编写代码。如果有个需求是...【详细内容】
2021-11-03  HillelDu    Tags:html   点击:(26)  评论:(0)  加入收藏
我们倾向于使用HTML与CSS、JavaScript等,使我们的网站或博客看起来更有吸引力,但你知道仅HTML就有很多实用的秘密,可能会派上用场,帮助你设计一个华丽的网站?下面是一些很酷的HTM...【详细内容】
2021-08-13  杭州程序员小张    Tags:HTML   点击:(89)  评论:(0)  加入收藏
meta 标签分两大部分:HTTP 标题信息(http-equiv)和页面描述信息(name)。 1、声明文档使用的字符编码<meta charset=&#39;utf-8&#39;>以下设置更为详细:<meta http-equiv="Content-...【详细内容】
2021-08-12  简易编程    Tags:meta标签   点击:(91)  评论:(0)  加入收藏
本节我们讲HTML表单标签,当你在网页输入框提交一个数据,这条数据一般是提交给了服务器,然后服务器根据请求返回你想要的数据,这个你输入信息的输入框或者提交的按钮就是HTML表...【详细内容】
2021-06-25  科技现象    Tags:HTML   点击:(141)  评论:(0)  加入收藏
背景日常工作中,项目编程免不了需要使用配置文件,早期yaml出现之前,大部分配置文件采用xml形式,但是以xml格式储存的数据要比以其他格式(如json、yaml)储存占有的空间要大得多,因为...【详细内容】
2021-06-21  爱读书的程序员    Tags:yaml   点击:(265)  评论:(0)  加入收藏
XML; 是什么? Extensible Markup Languare 可扩展标记型语言 为什么要有XML? 1.HTML的标签是固定的,不可以改变,也不可以进行一个&middot;&middot;&middot;扩展 2.HTML语法松散...【详细内容】
2021-06-01  LeviT    Tags:XML   点击:(193)  评论:(0)  加入收藏
同事跟我说他用jQuery取不到页面上隐藏元素input的值,他的html页面大概内容如下。<!DOCTYPE html><html lang="zh"> <head> <meta http-equiv="Content-Type" content="text/...【详细内容】
2021-05-18  IT洞察者    Tags:Html   点击:(218)  评论:(0)  加入收藏
HTML5语义化与新特性什么是HTML语义化?表示选择合适的标签(语义化标签)便于开发者阅读和写出更优雅的代码为什么要使用语义化标签?1). 在没有CSS样式的情况下,页面整体也会呈现...【详细内容】
2021-03-02      Tags:HTML   点击:(236)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条