2017-10-18 22 views
0

A la page 8 de la YAML spec, les auteurs donnent un exemple de la « suite d'applications » de la page 4 comme ceci:YAML: comment interpréter la séquence des correspondances

product: 
    - sku   : BL394D 
     quantity : 4 
     description : Basketball 
     price  : 450.00 
    - sku   : BL4438H 
     quantity : 1 
     description : Super Hoop 
     price  : 2392.00 

Pour ma compréhension comment pourrais-je (à peu près) représente cela dans, disons, Python?

Mappage> Séquence> Mappage, mappage, mappage ...?

{"Product" : ({ "sku" : "BL394D" }, {"quantity" : 4 }), ... } 

Ou Mappage> Séquence de mappage 1, 2, 3, ...?

{"Product" : ({ "sku" : "BL394D" }), ({ "quantity" : 4 }), ...)} 

Ou autre chose?

Répondre

0

Si vous cherchez comment obtenir l'objet Python à partir d'une représentation yaml, vous pouvez utiliser un parseur yaml. Tels que pyyaml.

Installation avec pip: pip install pyyaml

Ensuite, par exemple:

>>> 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 ne supporte que la plupart des spécifications YAML 1.1 (à partir de 2005) qui a été remplacé en 2009 par YAML 1.2. En dehors de cela, 'yaml.load()' est documenté comme étant dangereux, et il n'y a absolument aucune raison de ne pas utiliser 'yaml.safe_load()' si vous insistez pour utiliser PyYAML. – Anthon

1

Il semblerait que si JSON:

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

Ainsi en Python, ce serait un objet qui a une carte au produit, qui est un tableau d'autres objets avec les propriétés sku, quantité, etc

0

A la racine du document YAML il y a une cartographie. Ceci a une clé product. Sa valeur est une séquence, avec deux éléments (indiqués par les tirets -).

Les éléments de séquence sont à nouveau des mappages et la première paire clé/valeur de chacun de ces mappages commence sur la même ligne que l'élément de séquence (sa clé est sku).

En Python, par défaut, un mappage est chargé en tant que dict et une séquence est chargée comme list, vous pouvez donc définir les données en Python à l'aide: il suffit

dict(product=[dict(
    sku='BL394D', quantity= 4, description='Basketball', price=450.00], 
    sku='BL4438H', quantity= 1, description='Super Hoop', price=2392.00], 
) 

Vous pouvez bien sûr charger le structure de données, puis imprimer cela pour voir comment cela est chargé.