假设我有一系列像这样的哈希值;
site.foo = [
{
"foo": "bar",
"baz": ["a", "b", "c"]
},
{
"foo": "baz",
"baz": ["x", "y"]
},
...
]
我想获取数组中的所有值(bar, a, b, c, baz, x, y
)并将其作为JSON输出到模板中的javascript变量中。
我该怎么做?
答案 0 :(得分:1)
我假设你知道你的数据是如何组织的。
{% 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>
如果您不知道确切的数据结构,例如:
-
foo: "bar"
baz: ["a", "b", "c", 10]
-
foo: baz
baz: ["x", "y"]
any: other
key: ['toto','titi']
你必须采用插件的方式。创建一个包含以下内容的文件_plugins/flatten.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 }};