36

如何在 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"
                    ]
                }
            ]
        }
    }

这几乎是正确的,但之后""应该有一个嵌套列表,而不仅仅是另一个列表项。我怎样才能解决这个问题?

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

4

3 回答 3

38

答案是:

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

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

于 2013-05-02T09:50:49.690 回答
8

从新开始嵌套列表。使用这种方法很容易弄清楚。

阅读这篇文章和这篇文章。他们有很多例子。

试试这样:

YAML

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

等效的 JSON:

{
  "URL": {
    "Description": "URL of the website",
    "Value": {
      "Fn::Join": [
        "",
        [
          "http://",
          {
            "Fn::GetAtt": [
              "ElasticLoadBalancer",
              "DNSName"
            ]
          }
        ]
      ]
    }
  }
}
于 2018-04-09T04:02:25.380 回答
4

尝试:

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

json输出:

{
  "Hello": [
    "as", 
    [
      "http://", 
      [
        "cat"
      ]
    ]
  ]
}
于 2013-05-02T09:01:02.930 回答