2016-12-19 3 views
0

Я работаю над проектом Jekyll и имею tools.json в папке _data. Файл JSON отформатирован следующим образом:Сортировка массива JSON на Jekyll

{ 
"tools": [ 
    { 
     "title": "DER tool", 
     "url": "https://der.us/", 
     "sticky": "false" 
    }, 
    { 
     "title": "ZXY tool", 
     "url": "https://zxy.us/", 
     "sticky": "false" 
    }, 
    { 
     "title": "ABC tools", 
     "url": "https://abc.us/", 
     "sticky": "false" 
    }, 
    { 
     "title": "RSW tools", 
     "url": "https://rsw.us/", 
     "sticky": "true" 
    } 
]} 

Я хочу, чтобы отсортировать элементы в алфавитном порядке, но если sticky: true он должен быть на самом верху. В идеале выход должен быть равен:

<ul> 
<li>RSW tool</li> 
<li>ABC tool</li> 
<li>DER tool</li> 
<li>ZXY tool</li> 
</ul> 
+0

Будут ли много липких предметов? – approxiblue

+0

Да, будет. –

ответ

1

Вы можете сортировать липкие и нелипкие предметы отдельно.

{% assign sticky_tools = site.data.tools.tools | where: 'sticky', true | sort: 'title' %} 
{% assign tools = site.data.tools.tools | where: 'sticky', false | sort: 'title' %} 

<ul> 
    {% for t in sticky_tools %} 
    <li>{{ t.title }}</li> 
    {% endfor %} 

    {% for t in tools %} 
    <li>{{ t.title }}</li> 
    {% endfor %} 
</ul> 

Как и в сторону, если вы tools.json, содержащие только массив в корне (wthout ключ «инструменты»), вы можете получить доступ к нему с site.data.tools вместо site.data.tools.tools.

+0

Ты потрясающий! Спасибо! –

0

Вы можете выполнить последовательную сортировку.

{% assign sortedByTitleTools = site.data.tools.tools | sort: "title" | reverse %} 
{% assign sortedByStickyTools = sortedByTitleTools | sort: "sticky" | reverse %} 
<ul> 
{% for t in sortedByStickyTools %} 
    <li>{{ t.title }}</li> 
{% endfor %} 
</ul> 
Смежные вопросы