yaml中的嵌套列表

时间:2013-05-02 08:55:37

标签: yaml

如何在YAML中创建嵌套列表?我想得到:

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

这是我的YAML不起作用(使用pyYaml):

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

我做错了什么?

** * ** * ** * 更新: * ** * ** * ****

具体来说,我正在尝试从YAML生成以下JSON:

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

这是我工作中最接近的YAML,但它并不能满足我的需求。

YAML是:

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

这导致:

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

这几乎是正确的,但在“”之后应该有一个嵌套列表,而不仅仅是另一个列表项。我该如何解决这个问题?

(PS这将被输入API,因此输出必须完全匹配)

3 个答案:

答案 0 :(得分:19)

答案是:

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

(参见http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLsyntax - “块序列可以嵌套”)

答案 1 :(得分:3)

尝试:

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

Json输出:

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

答案 2 :(得分:1)

从新的line启动嵌套列表。使用这种方法很容易理解。

阅读thisthis条款。他们有很多例子。

尝试这样:

<强> YAML

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

等效JSON

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