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