web-dev-qa-db-fra.com

Listes imbriquées dans yaml

Comment puis-je créer des listes imbriquées dans YAML? Je veux obtenir:

 {"Hello": ["as", ["http://", ["cat"]]]}

Voici mon YAML qui ne fonctionne pas (avec pyYaml):

  Hello:
    - "as"
      - "http://"
        - cat

Qu'est-ce que je fais mal?

** * ** * ** * Mise à jour: * ** * ** * ****

Plus précisément, j'essaie de générer le JSON suivant à partir de YAML:

"URL" : {
  "Description" : "URL of the website",
  "Value" :  { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ "ElasticLoadBalancer", "DNSName" ]}]]}
}

Voici le YAML le plus proche sur lequel je travaille, mais il ne donne pas tout à fait ce dont j'ai besoin.

YAML c'est:

  Outputs:
    URL:
      Description: URL of the website
      Value:
        "Fn::Join":
        - ""
        - "http://"
        - "Fn::GetAtt":
          - ElasticLoadBalancer
          - DNSName

Il en résulte:

    "URL": {
        "Description": "URL of the website", 
        "Value": {
            "Fn::Join": [
                "", 
                "http://", 
                {
                    "Fn::GetAtt": [
                        "ElasticLoadBalancer", 
                        "DNSName"
                    ]
                }
            ]
        }
    }

C'est presque correct, mais après "" il devrait y avoir une liste imbriquée, pas juste un autre élément de la liste. Comment puis-je réparer cela?

(PS Cela va être introduit dans une API donc la sortie doit correspondre complètement)

25
user1491250

Et la réponse est:

URL:
  Description: URL of the website
  Value:
    "Fn::Join":
      - ""
      - - "http://"
        - "Fn::GetAtt":
            - ElasticLoadBalancer
            - DNSName

(voir http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLsyntax - "les séquences de blocs peuvent être imbriquées")

20
user1491250

Essayer:

Hello: 
  ["as", 
    ["http://", 
      [cat]
    ]
]

Sortie Json:

{
  "Hello": [
    "as", 
    [
      "http://", 
      [
        "cat"
      ]
    ]
  ]
}
3
Yohann

démarrer la liste imbriquée à partir d'une nouvelle ligne . en utilisant cette approche, il est facile de comprendre.

Lisez les articles this et this . Ils ont beaucoup d'exemples.

essayez comme ceci:

[~ # ~] yaml [~ # ~]

Value:
    "Fn::Join":
      - ""
      -
         - "http://"
         - "Fn::GetAtt":
              - ElasticLoadBalancer
              - DNSName

JSON équivalent

{
  "URL": {
    "Description": "URL of the website",
    "Value": {
      "Fn::Join": [
        "",
        [
          "http://",
          {
            "Fn::GetAtt": [
              "ElasticLoadBalancer",
              "DNSName"
            ]
          }
        ]
      ]
    }
  }
}
1
Arayan Singh