2017-10-18 46 views
0

的序列在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 }), ...)} 

还是别的什么?

回答

0

如果您正在寻找如何从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' 
    }] 
} 
+0

PyYAML仅支持大部分YAML 1.1规范(从2005年开始),YAML 1.2在2009年被YAML 1.2取代。除此之外,'yaml.load()'被证明是不安全的,如果你坚持使用PyYAML,绝对没有理由不使用'yaml.safe_load()'。 – Anthon

1

这将表现为这样在JSON:

{ 
    "product": [ 
     { 
      "sku": "BL394D", 
      "quantity": 4, 
      "description": "Basketball", 
      "price": 450 
     }, 
     { 
      "sku": "BL4438H", 
      "quantity": 1, 
      "description": "Super Hoop", 
      "price": 2392 
     } 
    ] 
} 

所以在Python,这将是具有地图的产品,这是其它的目的与特性SKU的数量等阵列的对象

0

在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], 
) 

当然你可以只加载数据结构,然后打印,看看它是如何加载的。