如何在Jekyll中从JSON加载数据

时间:2014-06-01 19:02:59

标签: json jekyll

在探索Jekyll进行网站生成时,我遇到了JSON数据加载问题。我已生成默认的Jekyll网站,将tracks.json文件添加到_data文件夹,并将此代码添加到默认index.html

<span>Tracks:</span>
<ul>
  {% for track in site.data.tracks.tracks %}
    <li>Title: {{ track.title }}</li>
  {% endfor %}    
</ul>

结果我生成了这段代码:

<span>Tracks:</span>
<ul>
</ul>

tracks.json看起来像:

{
   "tracks":[
      {
         "id":"140",
         "title":"Android"
      },
      {
         "id":"142",
         "title":"GDG[x]"
      }
   ]
}

我使用正确的方式访问JSON字段吗?如果没有,那么正确的方法是什么?

更新:问题已在Jekyll v.2.1.0

中修复

4 个答案:

答案 0 :(得分:5)

您可以将.json文件中的顶级元素设为如下数组:

@preference_set = FactoryGirl.create(:preference_set_with_preferences)

然后您可以更简单地访问它[{ "id":"140", "title":"Android" }, { "id":"142", "title":"GDG[x]" }]

答案 1 :(得分:2)

site.data.tracks[0].tracks尝试一下。玩的很开心。 ; - )

答案 2 :(得分:1)

我建议将您的数据放在draw_white_space": "all" 中,如下所示:

track.json

您可以根据需要添加other attributes并访问以下数据:

{
   "atribut": "Jekyll site generation with JSON data",
   "gallery":[
      {
     "group":"Tracks",
     "items":[
            {
               "id":"140",
               "title":"Android"
            },
            {
               "id":"142",
               "title":"GDG[x]"
            }
         ]
      }
   ]
}

输出将保持与预期相同:

{% for product in site.data.track.gallery %}
<span>{{ product.group }}:</span>
<ul>
    {% for item in product.items %}
    <li>Title: {{ item.title }}</li>
    {% endfor %}
</ul>
{% endfor %}

好处是您可以随时自由地证明该JSON文件的合理性而不会干扰数据。

答案 3 :(得分:0)

我真的建议使用yaml代替:)。它本身由Jekyll支持(您可以将它放在_config.yml中(然后您可以在许多页面中使用它)或在页面的YAML Front事件中(然后它可用于页面本身)。当您将它放在那里时,数据被解析通过jekyll你可以直接从那里使用它。

您甚至可以轻松地将Json转换为Yaml: https://www.npmjs.org/package/json2yaml

Yaml格式非常好,在某些方面甚至比JSON更好