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

时间:2017-10-26 17:00:22

标签: arrays object jekyll liquid

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

_layouts / content.html:

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

any_page.md

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

我对any_page.md的理解是

  • socialarray个对象,项目为0,1; social[0]等于* twitter。这些键可以变化。
  • 上面数组中的每个数组项都是social[i];具有类似已知密钥的对象(url,user,show)

问题:

如何访问page.social [i] [&#34; url&#34;]&amp;其他两个已知的键?
如何访问驻留在可变长度数组中的对象的这些已知键? 如何获得以下输出:twitterhttps://twitter.comfootrue

我尝试过的代码:

所有社交数组:{{ 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
    }
  }

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

{{ 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 个答案:

答案 0 :(得分:4)

这将有效:

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}}

答案 1 :(得分:1)

我接受了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所述,缩进&amp; -问题。每个项目的空间都比以前多,这使得自己的孩子更早。