📅  最后修改于: 2020-10-14 08:37:33             🧑  作者: Mango
YAML遵循标准流程流程。 YAML中的本机数据结构包括简单的表示形式,例如节点。它也称为表示节点图。
它包括映射,序列和标量,将其序列化以创建序列树。通过序列化,对象将与字节流一起转换。
序列化事件树有助于创建字符流的表示形式,如下图所示。
反向过程将字节流解析为序列化的事件树。之后,将节点转换为节点图。这些值随后在YAML本机数据结构中转换。下图解释了这一点-
YAML中的信息有两种使用方式:机器处理和人工消耗。 YAML中的处理器用作在上述图中互补视图之间转换信息的过程的工具。本章描述了YAML处理器必须在给定应用程序中提供的信息结构。
YAML包含用于以串行格式表示数据对象的序列化过程。 YAML信息的处理包括三个阶段:表示,序列化,表示和解析。让我们详细讨论它们。
YAML使用三种节点表示数据结构:序列,映射和标量。
序列是指条目的有序数,它映射了键值对的无序关联。它对应于Perl或Python数组列表。
下面显示的代码是序列表示的示例-
product:
- sku : BL394D
quantity : 4
description : Football
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
另一方面,映射表示字典数据结构或哈希表。下面是一个相同的例子-
batchLimit: 1000
threadCountLimit: 2
key: value
keyMapping:
标量表示字符串,整数,日期和原子数据类型的标准值。请注意,YAML还包括指定数据类型结构的节点。有关标量的更多信息,请参阅本教程的第6章。
YAML中需要序列化过程,以简化人类友好的密钥顺序和锚点名称。序列化的结果是YAML序列化树。可以遍历它以产生一系列的YAML数据事件调用。
下面给出了序列化的示例-
consumer:
class: 'AppBundle\Entity\consumer'
attributes:
filters: ['customer.search', 'customer.order', 'customer.boolean']
collectionOperations:
get:
method: 'GET'
normalization_context:
groups: ['customer_list']
itemOperations:
get:
method: 'GET'
normalization_context:
groups: ['customer_get']
YAML序列化的最终输出称为presentation。它以人类友好的方式表示字符流。 YAML处理器包括用于创建流,处理缩进和格式化内容的各种演示细节。此完整过程由用户的偏好决定。
YAML表示过程的一个示例是创建JSON值的结果。观察下面给出的代码以更好地理解-
{
"consumer": {
"class": "AppBundle\\Entity\\consumer",
"attributes": {
"filters": [
"customer.search",
"customer.order",
"customer.boolean"
]
},
"collectionOperations": {
"get": {
"method": "GET",
"normalization_context": {
"groups": [
"customer_list"
]
}
}
},
"itemOperations": {
"get": {
"method": "GET",
"normalization_context": {
"groups": [
"customer_get"
]
}
}
}
}
}
解析是表示的逆过程。它包括字符流并创建一系列事件。它丢弃表示过程中引入的导致序列化事件的细节。解析过程可能由于输入格式错误而失败。基本上,这是一个检查YAML格式是否正确的过程。
考虑下面提到的YAML示例-
---
environment: production
classes:
nfs::server:
exports:
- /srv/share1
- /srv/share3
parameters:
paramter1
它带有三个连字符,表示文档的开始,之后定义了各种属性。
YAML Lint是YAML的在线解析器,可帮助解析YAML结构以检查其是否有效。以下是YAML皮棉的官方链接: http : //www.yamllint.com/
您可以看到解析的输出,如下所示: