我试图理解YAML的基本概念。我没有找到任何可以解决我怀疑的相关文件。例如:
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
我猜, product
是一个序列:
- sku : BL394D
作为数据。我已经读过,在YAML中你可以将序列定义为:
name:
-a
-b
-c
我的问题是在product
序列中这些值是什么?它们在序列项目之前没有连字符。
quantity : 4
description : Basketball
price : 450.00
它们是否也属于key: value
的序列或嵌套sku
对?我完全糊涂了。通过列表中的列表,地图和嵌套列表示例帮助我理解基本语法,反之亦然。
答案 0 :(得分:2)
product
是两个地图的序列,每个地图都包含sku
,quantity
,description
和price
条目。
您可以找到一些示例和说明here。
答案 1 :(得分:1)
因为键quantity
缩进到与sku
缩进的同一级别,它们是相同映射的键(因此description
和price
)。此映射是一个序列元素,它在一个缩进级别引入,小于键缩进的-
。
写一个可能更清晰的方法就等同于你的例子:
product:
-
sku : BL394D
quantity : 4
description : Basketball
price : 450.00
-
sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
您可以访问数量值的方式当然取决于您使用的语言(以及您可能使用的库)。对于Python下的ruamel.yaml和PyYAML,你可以这样做:
data['product'][0]['quantity']
获取值4
以不同的方式查看(有效)YAML数据通常很有帮助,特别是因为语法有多种形式,而且可能不是很明显
abc:
- 1
- 2
是从密钥abc
到具有两个值(1
和2
)的单个序列的映射,这是等效的:
abc:
- 1
- 2
所以是:
abc: [ 1, 2]
如果您比使用YAML更熟悉JSON表示法或使用其online YAML parser输出,那么查看Python通常会有所帮助。
如果您使用Python,您也可以在本地轻松完成此操作:
import sys
import ruamel.yaml as yaml
import json
from pprint import pprint
yaml_str = """\
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
"""
data = yaml.load(yaml_str)
pprint(data)
print('='*40)
json.dump(data, sys.stdout, indent=2)
会给你:
{'product': [{'description': 'Basketball',
'price': 450.0,
'quantity': 4,
'sku': 'BL394D'},
{'description': 'Super Hoop',
'price': 2392.0,
'quantity': 1,
'sku': 'BL4438H'}],
'tax': 251.42,
'total': 4443.52}
========================================
{
"product": [
{
"sku": "BL394D",
"price": 450.0,
"description": "Basketball",
"quantity": 4
},
{
"sku": "BL4438H",
"price": 2392.0,
"description": "Super Hoop",
"quantity": 1
}
],
"total": 4443.52,
"tax": 251.42
}