在 Jekyll _data 文件中寻址 JSON 对象的正确语法
Correct syntax for addressing JSON object in Jekyll _data file
我正在 Jekyll 中创建一个页面并尝试使用存储在 Jekyll 的“_data”文件夹中的 JSON 文件中的数据。 JSON 文件是“/_data/objectsandproperties.json”,包含:
{
"objectA": { "propertyA": "FooA", "propertyB": "BarA" },
"objectB": { "propertyA": "FooB", "propertyB": "BarB" },
"objectC": { "propertyA": "FooC", "propertyB": "BarC" }
}
我想输出一个格式如下的列表:
<dl>
<dt>objectA</dt>
<dd>propertyA: FooA</dd>
<dd>propertyB: BarA</dd>
<dt>objectB</dt>
<dd>propertyA: FooB</dd>
<dd>propertyB: BarB</dd>
<dt>objectC</dt>
<dd>propertyA: FooC</dd>
<dd>propertyB: BarC</dd>
</dl>
我目前在我的降价文件中使用 Liquid 标签,如下所示:
{% for objects in site.data.objectsandproperties %}
<dl>
{% for object in objects %}
<dt>Object names: {{ object }}</dt>
<dd>propertyA: {{ object.propertyA }}</dd>
<dd>propertyB: {{ object.propertyB }}</dd>
{% endfor %}
</dl>
{% endfor %}
这不起作用,因为对象不是 "objectA",而是整个对象具有属性等的对象
我无权访问创建 JSON 文件的脚本,因此我无法添加标签或将其设为数组等。我希望我可以让它与 Liquid 一起使用。
谢谢。
您可以利用 forloop
对象的属性访问和打印数据键:
<dl>
{%- for object in site.data.objectsandproperties %}
{%- for prop in object %}
{%- if forloop.first %}
<dt>{{ prop }}</dt>
{%- else %}
{%- for subprop in prop %}
<dd>{{ subprop[0] }}: {{ subprop[1] }}</dd>
{%- endfor %}
{%- endif %}
{%- endfor %}
{%- endfor %}
</dl>
使用 inspect
过滤器更好地了解我们正在处理的内容:
{% for object in site.data.objectsandproperties %}
{{ object | inspect }}
>> returns an array like :
>> ["objectA", {"propertyA"=>"FooA", "propertyB"=>"BarA"}]
name : {{ object.first }} or {{ object[0] }}
properties : {{ object.last}} or {{ object[1] }}
{% endfor %}
您的代码可以如下所示:
<dl>
{% for object in site.data.objectsandproperties %}
<dt>Object names: {{ object | first }}</dt>
<dd>propertyA: {{ object.last.propertyA }}</dd>
<dd>propertyB: {{ object.last.propertyB }}</dd>
{% endfor %}
</dl>
我正在 Jekyll 中创建一个页面并尝试使用存储在 Jekyll 的“_data”文件夹中的 JSON 文件中的数据。 JSON 文件是“/_data/objectsandproperties.json”,包含:
{
"objectA": { "propertyA": "FooA", "propertyB": "BarA" },
"objectB": { "propertyA": "FooB", "propertyB": "BarB" },
"objectC": { "propertyA": "FooC", "propertyB": "BarC" }
}
我想输出一个格式如下的列表:
<dl>
<dt>objectA</dt>
<dd>propertyA: FooA</dd>
<dd>propertyB: BarA</dd>
<dt>objectB</dt>
<dd>propertyA: FooB</dd>
<dd>propertyB: BarB</dd>
<dt>objectC</dt>
<dd>propertyA: FooC</dd>
<dd>propertyB: BarC</dd>
</dl>
我目前在我的降价文件中使用 Liquid 标签,如下所示:
{% for objects in site.data.objectsandproperties %}
<dl>
{% for object in objects %}
<dt>Object names: {{ object }}</dt>
<dd>propertyA: {{ object.propertyA }}</dd>
<dd>propertyB: {{ object.propertyB }}</dd>
{% endfor %}
</dl>
{% endfor %}
这不起作用,因为对象不是 "objectA",而是整个对象具有属性等的对象
我无权访问创建 JSON 文件的脚本,因此我无法添加标签或将其设为数组等。我希望我可以让它与 Liquid 一起使用。
谢谢。
您可以利用 forloop
对象的属性访问和打印数据键:
<dl>
{%- for object in site.data.objectsandproperties %}
{%- for prop in object %}
{%- if forloop.first %}
<dt>{{ prop }}</dt>
{%- else %}
{%- for subprop in prop %}
<dd>{{ subprop[0] }}: {{ subprop[1] }}</dd>
{%- endfor %}
{%- endif %}
{%- endfor %}
{%- endfor %}
</dl>
使用 inspect
过滤器更好地了解我们正在处理的内容:
{% for object in site.data.objectsandproperties %}
{{ object | inspect }}
>> returns an array like :
>> ["objectA", {"propertyA"=>"FooA", "propertyB"=>"BarA"}]
name : {{ object.first }} or {{ object[0] }}
properties : {{ object.last}} or {{ object[1] }}
{% endfor %}
您的代码可以如下所示:
<dl>
{% for object in site.data.objectsandproperties %}
<dt>Object names: {{ object | first }}</dt>
<dd>propertyA: {{ object.last.propertyA }}</dd>
<dd>propertyB: {{ object.last.propertyB }}</dd>
{% endfor %}
</dl>