yaml-基本格式和JavaScript之间的转换
<p>python处理yaml格式文档的官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation</p><p><code>yaml</code>是一个可读性高,用来表达数据序列化的格式,通常作为配置文件使用。yaml文件是python文件的解析器和发射器(parser and emitter)</p>
<h4 id="yaml语法">yaml语法</h4>
<ul>
<li>大小写敏感</li>
<li>使用缩进表示层级关系</li>
<li>缩进时不允许使用Tab键,只允许使用空格。</li>
<li>缩进的空格数目不重要,只要相同层级的元素左侧对齐即可</li>
</ul>
<h4 id="yaml支持的数据结构">yaml支持的数据结构</h4>
<ul>
<li>对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)</li>
<li>数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)</li>
<li>纯量(scalars):单个的、不可再分的值.javaScrip中的纯量有:字符串、布尔值、整数、浮点数、Null、时间、日期</li>
</ul>
<h4 id="yaml最常用的格式表示方式">yaml最常用的格式表示方式</h4>
<ol>
<li>对象的一组键值对,使用冒号结构表示。</li>
</ol>
<pre><code>animal: pets
</code></pre>
<ol start="2">
<li>一组连词线开头的行,构成一个数组。</li>
</ol>
<pre><code class="language-yaml">- Cat
- Dog
- Goldfish
</code></pre>
<ol start="3">
<li>对象和数组可以结合使用,形成复合结构。</li>
</ol>
<pre><code>languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
</code></pre>
<ol start="4">
<li>两组数据的时候用<code>---</code>分割或者数组嵌套的方法</li>
</ol>
<pre><code>- Cat
- Dog
- Goldfish
---
- Cat
- Dog
- Goldfish
</code></pre>
<h4 id="yaml中比较高级的表示">yaml中比较高级的表示</h4>
<ol>
<li><code>null</code>用<code>~</code>表示。</li>
</ol>
<pre><code>parent: ~
</code></pre>
<ol start="2">
<li>多行字符串可以使用<code>|</code>保留换行符,也可以使用<code>></code>折叠换行。</li>
</ol>
<pre><code>this: |
Foo
Bar
that: >
Foo
Bar
</code></pre>
<p>转为 JavaScript 代码如下。</p>
<pre><code>{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
</code></pre>
<ol start="3">
<li><code>+</code>表示保留文字块末尾的换行,<code>-</code>表示删除字符串末尾的换行。</li>
</ol>
<pre><code class="language-yaml">s1: |
Foo
s2: |+
Foo
s3: |-
Foo
</code></pre>
<p>转为 JavaScript 代码如下。</p>
<pre><code class="language-js">{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
</code></pre>
<ol start="4">
<li>锚点<code>&</code>和别名<code>*</code>,可以用来引用。</li>
</ol>
<pre><code class="language-yaml">defaults: &defaults
adapter:postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
</code></pre>
<p>等同于下面的代码。</p>
<pre><code class="language-yaml">defaults:
adapter:postgres
host: localhost
development:
database: myapp_development
adapter:postgres
host: localhost
test:
database: myapp_test
adapter:postgres
host: localhost
</code></pre>
<ol start="5">
<li><code>&</code>用来建立锚点(<code>defaults</code>),<code><<</code>表示合并到当前数据,<code>*</code>用来引用锚点。</li>
</ol>
<p>下面是另一个例子。</p>
<pre><code>- &showell Steve
- Clark
- Brian
- Oren
- *showell
</code></pre>
<p>转为 JavaScript 代码如下。</p>
<pre><code>[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
</code></pre>
<h4 id="函数和正则表达式的转换">函数和正则表达式的转换</h4>
<p>这是 JS-YAML 库特有的功能,可以把函数和正则表达式转为字符串。</p>
<pre><code class="language-javascript"># example.yml
fn: function () { return 1 }
reg: /test/
</code></pre>
<p>解析上面的 yml 文件的代码如下。</p>
<pre><code class="language-javascript">var yaml = require('js-yaml');
var fs = require('fs');
try {
var doc = yaml.load(
fs.readFileSync('./example.yml', 'utf8')
);
console.log(doc);
} catch (e) {
console.log(e);
}
</code></pre>
<p>从 JavaScript 对象还原到 yaml 文件的代码如下。</p>
<pre><code class="language-javascript">var yaml = require('js-yaml');
var fs = require('fs');
var obj = {
fn: function () { return 1 },
reg: /test/
};
try {
fs.writeFileSync(
'./example.yml',
yaml.dump(obj),
'utf8'
);
} catch (e) {
console.log(e);
}
</code></pre>
<p>python处理yaml文件的常用方法:https://www.cnblogs.com/saiminhou/p/13729119.html</p><br><br>
来源:https://www.cnblogs.com/saiminhou/p/13729910.html
頁:
[1]