yaml c语言,yaml文件编写
转载,原地址:http://www.ruanyifeng.com/blog/2016/07/yaml.html
编程必然需要写配置文件,如何写配置也是一门学问。
YAML是一种专门编写配置文件的语言,非常简洁和强大,远比JSON格式方便。
本文以JS-YAML的实现为例,介绍了YAML的语法。你可以去网上演示来验证下面的例子。
一、引言YAML语言(读音/jml/)的设计目标是方便人类阅读和书写。它本质上是一种通用的数据序列化格式。
它的基本语法规则如下。
区分大小写的缩进表示层次关系。缩进时不允许使用Tab键,只允许使用空格。缩进空格的数量无关紧要。只要同一级别的元素靠左对齐,#就表示注释。从这个字符到行尾,它将被解析器忽略。
YAML支持三种数据结构。
对象:一组键值对,也称为映射)/哈希)/字典数组:一组按顺序排列的值,也称为序列)/列表标量:单个不可分的值。这三种数据结构描述如下。
二。对象的一组键值对,用冒号结构表示。
动物:宠物被转换成JavaScript如下。
{animal: pets} Yaml还允许用另一种方式将所有键值对写成一个内联对象。
Hash: {name: Steve,foo: bar}被转换成JavaScript如下。
{hash: {name: Steve ,foo: bar}} III。数组在连接行开始的一组行构成一个数组。
-猫-狗-金鱼转换成JavaScript如下。
[猫,狗,金鱼]如果数据结构的子成员是一个数组,可以在该项下缩进一个空格。
-猫-狗-金鱼转换成JavaScript如下。
[[Cat , Dog ,金鱼]]数组也可以采用内联表示法。
动物:[猫,狗]转换成JavaScript如下。
{动物:[猫,狗]}四。复合结构对象和数组可以组合形成一个复合结构。
语言:-Ruby-Perl-Python网站:yaml.org YAML Ruby:ruby-lang.org Python:python.org Perl:use.perl.org转换成JavaScript如下。
{语言:[Ruby , Perl , Python],网址:{YAML: YAML.org ,Ruby: ruby-lang.org ,Python: python.org ,Perl: use.perl.org}}五、标量以下数据类型属于JavaScript的标量。
布尔值整数浮点数空时间日期值直接用文字形式表示。
Number: 12.30转换成JavaScript如下。
{number: 12.30}布尔值用真和假来表示。
IsSet: true被转换成JavaScript如下。
{isSet: true} null用~表示。
Parent: ~转换成JavaScript如下。
{parent: null}时间采用ISO8601格式。
ISO 8601:2001-12-14t 21:59:43.10-05:00转换为JavaScript如下。
{iso8601:新日期( 2001-12-14t 21:59:43.10-05:00 )}日期以复合iso8601格式由年、月和日表示。
日期:1976年7月31日,转换成JavaScript如下。
{ date:new date( 1976-07-31 )} YAML允许使用两个感叹号来转换数据类型。
e:str 123f:True被转换成JavaScript如下。
{e: 123 ,f:真 }六。字符串字符串是最常见和最复杂的数据类型。
默认情况下,字符串不用引号表示。
Str:这是一行转换成JavaScript的字符串,如下所示。
{str:这是一行字符串 }如果字符串包含空格或特殊字符,需要用引号括起来。
Str: content: string 转换成JavaScript如下。
{str: content: string}单引号和双引号都可以,双引号不会转义特殊字符。
S1: Content \ n string S2: Content \ n string 转换成JavaScript如下。
{s1: content \\n string ,s2: content \n string}如果单引号中有单引号,则必须用两个单引号连续转义。
Str:劳动节被转换成JavaScript如下。
{ str:劳动节 }字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。
str:这是一段多行字符串转为Java脚本语言如下。
{ str:这是一段多行字符串 } 多行字符串可以使用保留换行符,也可以使用折叠换行。
这个:美食吧那个:Foo Bar转为Java脚本语言代码如下。
{这个: Foo\nBar\n ,那个: Foo Bar\n }表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
s1: Foos2: Foos3: - Foo转为Java脚本语言代码如下。
{ s1: Foo\n ,s2: Foo\n\n\n ,s3: Foo }字符串之中可以插入超文本标记语言标记。
邮件: p style=color: red 段落/p转为Java脚本语言如下。
{邮件: \np style=color: red\n段落\n/p\n }七、引用锚点和别名*,可以用来引用。
默认值:默认值适配器:postgres主机:本地主机开发:数据库:myapp _开发:*默认值测试:数据库:myapp _ test:*默认值等同于下面的代码。
默认值:适配器:postgres主机:本地主机开发:数据库:myapp _开发适配器:postgres主机:localhosttest:数据库:myapp_test适配器:postgres主机:本地主机用来建立锚点(默认值),表示合并到当前数据,*用来引用锚点。
下面是另一个例子。
-秀尔史蒂夫克拉克整齐的太阳-柳文欢-*肖维尔转为Java脚本语言代码如下。
[史蒂夫,克拉克,整齐的太阳,柳文欢,史蒂夫]八、函数和正则表达式的转换这是JS-YAML库特有的功能,可以把函数和正则表达式转为字符串。
#举例。yml fn:函数(){ return 1 } reg:/test/解析上面的阳明海运股份有限公司文件的代码如下。
var YAML=require( js-YAML );var fs=require( fs );请尝试YAML。负载(fs。读取文件同步(./example.yml , utf8 );控制台。日志(doc);} catch(e){控制台。日志(e);} 从Java脚本语言对象还原到格式文件的代码如下。
var YAML=require( js-YAML );var fs=require( fs );var obj={ fn: function () { return 1 },reg:/test/};请尝试{ fs.writeFileSync( ./example.yml ,yaml.dump(obj), utf8 );} catch(e){控制台。日志(e);} 九、参考链接YAML 1.2规格来自红宝石的维基百科的YAML(完)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。