Правильный синтаксис для адресации объекта JSON в файле _data Jekyll - PullRequest
2 голосов
/ 10 марта 2019

Я создаю страницу в Jekyll и пытаюсь использовать данные в файле JSON, хранящемся в папке _data Jekyll.Файл 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", а весь объект objectA со свойствами и т. д.

У меня нет доступа кскрипт, который создает файл JSON, поэтому я не могу добавить метку или сделать его массивом и т. д. Я надеюсь, что смогу заставить его работать с Liquid.

Спасибо.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Использование фильтра 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>
0 голосов
/ 10 марта 2019

Вы можете получить доступ и распечатать ключи данных, используя атрибуты объекта 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>
...