如何访问 Jekyll 数组中的对象?
How to access objects in Jekyll array?
我的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的理解是
social
是具有项目 0、1 的对象的 array
; social[0]
等于 * twitter
。这些键可以是可变的。
- 上面数组中的每个数组项都是
social[i]
;具有相似已知键的对象(url、用户、显示)
问题:
如何访问 page.social[i]["url"] 和其他两个已知密钥?
如何访问驻留在可变长度数组中的对象的这些已知键?
如何获得以下输出:twitter
、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
}
}
尝试访问项目 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 %}
这会起作用:
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}}
我接受了marcanuy's ,这里我只是根据他的回答记录下我使用的东西;
{% 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 所述,缩进和
-
很重要。每个比之前有更多空间的项目使自己成为之前的 child。
我的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的理解是
social
是具有项目 0、1 的对象的array
;social[0]
等于 *twitter
。这些键可以是可变的。- 上面数组中的每个数组项都是
social[i]
;具有相似已知键的对象(url、用户、显示)
问题:
如何访问 page.social[i]["url"] 和其他两个已知密钥?
如何访问驻留在可变长度数组中的对象的这些已知键?
如何获得以下输出:twitter
、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
}
}
尝试访问项目 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 %}
这会起作用:
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}}
我接受了marcanuy's
{% 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 所述,缩进和
-
很重要。每个比之前有更多空间的项目使自己成为之前的 child。