代码之家  ›  专栏  ›  技术社区  ›  DavChana

如何访问Jekyll数组中的对象?

  •  8
  • DavChana  · 技术社区  · 8 年前

    我的Jekyll页面代码如下( 简化

    ---
    layout: null
    ---
    <pre>
        {{ content }}
    </pre>
    

    任何页面。医学博士

    ---
    layout: content
    social:
        - twitter :
            url : "https://twitter.com"
            user : "foo"
            show : true
        - instagram : 
            url : "https://instagram.com"
            user : "bar"
            show : false
    ---
    

    我的理解以上任何_页。md是

    • social 是一个 array social[0] 等于* twitter . 这些键可以是可变的。
    • 上面数组中的每个数组项都是 social[i] ; 具有类似已知键(url、用户、显示)的对象

    问题:

    如何访问页面。社交[i][“url”]&其他两把已知的钥匙?

    如何获得以下输出: 啁啾 https://twitter.com , foo , true

    我尝试过的代码:

    {{ page.social }} 输出 (如预期)

      {“twitter”=>
        { “url”=>”https://twitter.com”,
          “user”=>”foo”,
          “show”=>true
        }
      }
      {“instagram”=>
        { “url”=>”https://instagram.com”,
          “user”=>”bar”,
          “show”=>false
        }
      }
    

    社交阵列的第一个对象: {{ page.social[0] }} 输出 (如预期)

    {“twitter”=>
        { “url”=>”https://twitter.com”,
          “user”=>”foo”,
          “show”=>true
        }
      }
    

    尝试访问失败 url 第01项(所有结果为空):

    {{ page.social[0]["url"] }}  
    {{ page.social[0][url] }}  
    {{ page.social[0]."url" }}  
    {{ page.social[0].url }}  
    {{ page.social[0][0] }}  
    

    附录:

    我还尝试了for循环&它给出了根级别的所有值(twitter等),但无法访问对象密钥:

    {% for item in page.social %}  
        item = {{ item }}                # works
        item[URL] = {{ item[url] }}      # empty
        item["URL"] = {{ item["url"] }}  # empty
        item."URL" = {{ item."url" }}    # empty
        item.URL = {{ item.url }}        # empty
        i = {{forloop.index }}           # ok, but starts from 1 instead of 0
    {% endfor %}  
    
    2 回复  |  直到 8 年前
        1
  •  7
  •   marcanuy    8 年前

    这将起作用:

    twitter key: {{page.social[0]|first|first}} 
    <h2>data</h2>
    url: {{page.social[0]['twitter'].url}}
    user: {{page.social[0]['twitter'].user}}
    show: {{page.social[0]['twitter'].show}}
    

    另一种方法

    social:
      twitter :
         url : "https://twitter.com"
         user : "foo"
         show : true
      instagram : 
         url : "https://instagram.com"
         user : "bar"
         show : false
    

    然后,您可以通过以下方式访问它:

    {% for item in page.social%}
    key: {{item[0]}}<br>
    {% endfor %}
    <hr>
    <h2>data</h2>
    url: {{page.social['twitter'].url}}
    user: {{page.social['twitter'].user}}
    show: {{page.social['twitter'].show}}
    
        2
  •  5
  •   DavChana    8 年前

    我已经接受了 marcanuy answer ,在这里,我只是根据他的回答记录我使用了什么;

    {% for item in page.social %}  # OUTPUT for 1st item
        {{ item[0] }}              # twitter:
        {{ item[1].url }}          # https://twitter.com
        {{ item[1].user }}         # foo
        {{ item[1].show }}         # true
      {% endfor %}   
    

    此外,前面的声明也有点变化。使用上述代码的是:

    social:
      twitter :
         url : "https://twitter.com"
         user : "foo"
         show : true
      instagram : 
         url : "https://instagram.com"
         user : "bar"
         show : false
    
    • 注意缺失 - 破折号。虽然这两种方法都是正确的,但我需要阅读更多关于如何访问这两种方法的内容。
    • 如中所述 http://yaml.org/spec/1.2/spec.html - 课题每一项都比前一项有更多的空格,使其自身成为前一项的子项。