在Jekyll\u数据文件中寻址JSON对象的正确语法

在Jekyll\u数据文件中寻址JSON对象的正确语法,json,jekyll,liquid,Json,Jekyll,Liquid,我正在Jekyll中创建一个页面,并尝试使用存储在Jekyll的“_data”文件夹中的JSON文件中的数据。JSON文件为“/\u data/objectsandproperties.JSON”,包含: { "objectA": { "propertyA": "FooA", "propertyB": "BarA" }, "objectB": { "propertyA": "FooB", "propertyB": "BarB" }, "objectC": { "prop

我正在Jekyll中创建一个页面,并尝试使用存储在Jekyll的“_data”文件夹中的JSON文件中的数据。JSON文件为“/\u 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>
{% 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
房地产A:FooA
房地产b:巴拉
反对意见
房地产:FooB
属性b:倒钩
对象C
房地产a:FooC
不动产b: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>
{% 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 %}
{%用于site.data.objectsandproperties%}
{对象%中的对象的%}
对象名称:{{Object}
propertyA:{{object.propertyA}}
propertyB:{{object.propertyB}}
{%endfor%}
{%endfor%}
这不起作用,因为对象不是“objectA”,而是整个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>

{%-用于site.data.objectsandproperties%}
{%-对于对象%中的prop}
{%-if-forloop.first%}
{{prop}}
{%-else%}
{%-对于prop%]中的子进程}
{{subop[0]}}:{{subop[1]}
{%-endfor%}
{%-endif%}
{%-endfor%}
{%-endfor%}

您可以使用
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>

{%-用于site.data.objectsandproperties%}
{%-对于对象%中的prop}
{%-if-forloop.first%}
{{prop}}
{%-else%}
{%-对于prop%]中的子进程}
{{subop[0]}}:{{subop[1]}
{%-endfor%}
{%-endif%}
{%-endfor%}
{%-endfor%}

使用
检查
过滤器更好地了解我们正在使用的内容:

{% 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>

{site.data.objectsandproperties%中对象的%s}
对象名称:{{Object | first}}
propertyA:{{object.last.propertyA}}
propertyB:{{object.last.propertyB}}
{%endfor%}

使用
检查
过滤器更好地了解我们正在使用的内容:

{% 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>

{site.data.objectsandproperties%中对象的%s}
对象名称:{{Object | first}}
propertyA:{{object.last.propertyA}}
propertyB:{{object.last.propertyB}}
{%endfor%}

谢谢@ashmaroli,我可以访问对象的属性,只是无法显示对象的名称。由于for循环遍历JSON中的N个对象,我需要打印出对象的名称。所以我可以说:Name:objectA Name:objectB Name:objectC我想用你建议的语法我做不到。我通过更改JSON的结构来修复它,因此我有一个数组或一个名称/值对可以使用,但在本例中,我无法更改JSON。如何循环通过JSON文件显示每个对象的密钥文本?@DugFalby我已经修改了我的答案,以便为任何给定的JSON数据输出所需的标记。谢谢@ashmaroli,我将在今晚回到我的机器后重试。感谢您的澄清,这看起来不错,而且非常有用,因为该方法可以用于遍历任何JSON对象结构:-)谢谢@ashmaroli,我可以访问对象的属性,我只是无法显示对象的名称。由于for循环遍历JSON中的N个对象,我需要打印出对象的名称。所以我可以说:Name:objectA Name:objectB Name:objectC我想用你建议的语法我做不到。我通过更改JSON的结构来修复它,因此我有一个数组或一个名称/值对可以使用,但在本例中,我无法更改JSON。如何循环通过JSON文件显示每个对象的密钥文本?@DugFalby我已经修改了我的答案,以便为任何给定的JSON数据输出所需的标记。谢谢@ashmaroli,我将在今晚回到我的机器后重试。感谢您的澄清,这看起来不错,而且非常有用,因为该方法可以用于遍历任何JSON对象结构:-)谢谢@David Jacquel,我没有遇到inspect过滤器。今晚我会试试这个,它看起来正是我需要的:-)谢谢@David Jacquel我不会遇到inspect过滤器。今晚我要试试这个,它看起来正是我需要的:-)