Jekyll从数据打印自定义JSON字符串
假设我有一个这样的散列数组Jekyll从数据打印自定义JSON字符串,jekyll,Jekyll,假设我有一个这样的散列数组 site.foo = [ { "foo": "bar", "baz": ["a", "b", "c"] }, { "foo": "baz", "baz": ["x", "y"] }, ... ] 我想获取数组中的所有值(bar、a、b、c、baz、x、y),并将其作为JSON输出到模板中的javascript变量中 我该怎么做?我假设您知道数据的组织方式 {% assign splitMark = "###" %}
site.foo = [
{
"foo": "bar",
"baz": ["a", "b", "c"]
},
{
"foo": "baz",
"baz": ["x", "y"]
},
...
]
我想获取数组中的所有值(bar、a、b、c、baz、x、y
),并将其作为JSON输出到模板中的javascript变量中
我该怎么做?我假设您知道数据的组织方式
{% assign splitMark = "###" %}
{% assign arr = "" %}
{% for el in site.foo %}
{% assign arrSize = arr | size %}
<!-- if we already have something in our string
add the splitMark at the end -->
{% if arrSize > 0 %}
{% capture arr %}{{arr}}{{splitMark}}{%endcapture%}
{% endif %}
<!-- array + foo.foo value + splitMark -->
{% capture arr %}{{arr}}{{el.foo}}{{splitMark}}{%endcapture%}
<!-- transform an array to a string
with elements delimited by splitMark -->
{% assign bazStr = el.baz | join: splitMark %}
<!-- array + transformed array -->
{% capture arr %}{{arr}}{{bazStr}}{%endcapture%}
{% endfor %}
<!-- transform our string to an array splitting at the splitMark -->
{% assign arr = arr | split: splitMark %}
<script>
var my_var = {{ arr | jsonify }};
</script>
你必须走插件的路。创建包含以下内容的文件\u plugins/flatte.rb
:
module Jekyll
module FlattenArray
def flatten( datas )
datas.flat_map(&:values).flatten
end
end
end
Liquid::Template.register_filter(Jekyll::FlattenArray)
您现在可以按如下方式展平数据:
var my_var = {{ site.foo | flatten | jsonify }};
哇,谢谢!这是相当详细的。我到家后去看看。再次感谢!
var my_var = {{ site.foo | flatten | jsonify }};