YAML:如何解释的映射
问题描述:
的序列在YAML spec第8页,作者提供这样的第4页的“映射的序列”的例子:YAML:如何解释的映射
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
对于我自己的理解如何将我(约)是否代表Python中?
映射>序列>映射,映射,映射...?
{"Product" : ({ "sku" : "BL394D" }, {"quantity" : 4 }), ... }
或映射>映射序列1,2,3,...?
{"Product" : ({ "sku" : "BL394D" }), ({ "quantity" : 4 }), ...)}
还是别的什么?
答
如果您正在寻找如何从yaml表示中获取Python对象,则可以使用yaml分析器。如pyyaml。
安装与PIP:pip install pyyaml
然后,例如:
>>> doc = """
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
"""
>>> yaml.load(doc)
{
'product': [{
'description': 'Basketball',
'price': 450.0,
'quantity': 4,
'sku': 'BL394D'
}, {
'description': 'Super Hoop',
'price': 2392.0,
'quantity': 1,
'sku': 'BL4438H'
}]
}
答
这将表现为这样在JSON:
{
"product": [
{
"sku": "BL394D",
"quantity": 4,
"description": "Basketball",
"price": 450
},
{
"sku": "BL4438H",
"quantity": 1,
"description": "Super Hoop",
"price": 2392
}
]
}
所以在Python,这将是具有地图的产品,这是其它的目的与特性SKU的数量等阵列的对象
答
在YAML文档的根有一个映射。这有一个关键product
。它的值是一个序列,有两个项目(由破折号-
指示)。
序列元素也是映射,并且每个映射的第一个键/值对都与序列元素(其键为sku
)在同一行开始。
在Python,默认情况下,映射加载为dict
和序列加载为list
,因此你可以使用Python中定义数据:
dict(product=[dict(
sku='BL394D', quantity= 4, description='Basketball', price=450.00],
sku='BL4438H', quantity= 1, description='Super Hoop', price=2392.00],
)
当然你可以只加载数据结构,然后打印,看看它是如何加载的。
PyYAML仅支持大部分YAML 1.1规范(从2005年开始),YAML 1.2在2009年被YAML 1.2取代。除此之外,'yaml.load()'被证明是不安全的,如果你坚持使用PyYAML,绝对没有理由不使用'yaml.safe_load()'。 – Anthon