2017-10-18 89 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], 
) 

當然你可以只加載數據結構,然後打印,看看它是如何加載的。