Во-первых, JSON Template это не JSON.
Во-вторых, если у Вас нет представления о том чем является JSON или как он выглядит, посмотреть лучше здесь.

Секции выполняют большую часть работы в JSON Template. Есть всего две важные идеи, которые мы должны знать о секциях:
Может использоваться в секциях и повторяющихся секциях. Применяется для отображения недопустимого состояния, например если раздел не существует:
Теги используется для внедрения данных из JSON в наш файл.
Мы можем следовать структуре JSON, используя точечную нотацию:
@ несет в себе ссылку на элемент находящийся в области видимости — как 'this' в JavaScript
Обычно это используется чтобы отобразить HTML-код, в том случае если есть что отобразить.
Давайте взглянем на следующий пример:
В данном случае, если {title} не существует, в HTML будет записан пустой DIV:
Чтобы избежать этого, инструкция может быть записана следующим образом:
В результате, если названия нет, в HTML ничего не запишется.
Обычно, каждый элементы коллекции (например: блога) имеет соответствующее ему изображение.
Миниатюра привязана к публикации через URL данного поста, так что получить к ней доступ давольно легко:
Каждое изображение можно получить с несколькими вариантами ширины:
Существует также специальный тест на наличие у элемента коллекции, связанного с ней изображения. Это нужно чтобы не оказаться с пустым тегом в HTML.
Например:
Если шаблон ожидает наличие основного изображения, вне зависимости от того загружено оно или нет, можно воспользоваться инструкцией or:
Добавляет к слову окончание «S», если значение> 1
Добавляет к слову окончание «ES», если значение> 1
Облегчает связь между существительным и глаголом
Свой вариант (первое значение присваивается, если значение = 1, второе, если значение > 1)
Форматирование даты возможно в соответствии с форматом даты в YUI
Или в стиле твиттера
html – пропускает html-теги (<, >, &)
htmltag – пропускает html-теги и кавычки (<, >, &, "")
slugify – преобразует текст в нижний регистр, удаляет все, кроме буквенно-цифровых символов и символов подчеркивания, преобразует пробелы в дефис.
smartypants — переводит простые символы пунктуации ASCII в «умные» типографские знаки препинания HTML (Источник: http://daringfireball.net/projects/smartypants/)
Это серия специфичных дополнений от Squarespace для JSON Template. Тесты для адаптации кода к конкретным ситуациям. Сервис Squarespace очень вдохновляющая штука, я напишу о ней в следующей статье. Именно при знакомстве с девелоперской частью их продукта нам и потребуются знания в JSON Template.
Все предикаты работают как этот:
Имеет ли элемент коллекции (или сама коллекция) изображение (миниатюру)?
Имеет ли элемент коллекции описание?
Имеет ли элемент коллекции комментарии?
Имеет ли элемент коллекции комментарии Disqus?
Имеет ли элемент конкретный тип блока?
Доступные [blockName] тесты (заменте [blockName] на один из приведенных ниже типов):
Является ли данный навигационный пункт внешней ссылкой?
Является ли данный навигационный пункт папкой?
Имеет ли данный элемент коллекции информацию о местоположении?
Является ли данный элемент коллекции событием (Event)?
Добавить безсимвольный пробел:
Добавить табуляцию:
Добавить перенос строки (/n):
Добавить мета-данные:
Можно использовать форматирование чтобы загружать шаблоны, которые используют данные в пределах определенной переменной форматирования. Включение начинается с '%' и загружает файлы шаблона.
Создает секцию, которая отображается если 'if' возвращает истину (truthy conditions = true || has-value). Примечание: не ограничивать область видимости.
Вы можете использовать оператор {.or} для обработки неудавшихся тестов.
Хоть я и отослал Вас в начале к посту JSON и XML. Что лучше?, все же приведу пример кода JSON и здесь.
Я попытаюсь рассказать об области видимости, это простая концепция.
Наиболее наглядным примером определения области видимости является структура папок на компьютере при попытке найти файл. В JSON, переменная, которая содержит другие переменные похожа на папку компьютера. При нажатии в любую папку, у нас есть доступ к файлам внутри. Аналогичным образом, когда переменная в JSON находится в области видимости, у нас есть прямой доступ к другим переменных внутри.
Рассмотрим следующий пример JSON:
Переменная «items» содержит другие переменные. И внутри «items», переменная «data» тоже содержит другие переменные. О них вполне можно думать о как о папках.
Когда мы используем секцию JSON, эффект тот же что и при открытии папки на компьютере, у вас есть прямой доступ к файлам внутри.
Окей, теперь давайте посмотрим области видимости JSON Template в действии:
Если мы хотим добавить «body» для каждого элемента, можно написать так:
Или мы могли бы поместить переменные в область видимости «data»:
Нам может быть доступно «body» повсюду, просто используем указатель "@" для доступа к переменной «body»:
Зарубежные источники? — "Да". Информация никогда не публиковалась на хабре? — «Да». Продолжение будет? — «Да».
Во-вторых, если у Вас нет представления о том чем является JSON или как он выглядит, посмотреть лучше здесь.

Секции и Повторяющиеся секции
Секции выполняют большую часть работы в JSON Template. Есть всего две важные идеи, которые мы должны знать о секциях:
- Содержимое секции отображается только если секция существует.
- Секция определяет область видимости, являясь корневым разделом для любых, добавленных в нее, данных.
Cекция
{.section item} If this section exists, display this {.end}
Повторяющаяся секция
{.repeated section items}
If there are any items, repeat this info for each item
{.end}
Секция с альтернативой
{.repeated section items}
This stuff shows for each item.
{.alternates with}
------ *show this dashed line in between each item*
{.end}
Инструкция or
Может использоваться в секциях и повторяющихся секциях. Применяется для отображения недопустимого состояния, например если раздел не существует:
{.section item}
Item exists!
{.or}
Item does not exist :(
{.end}
Теги
Теги используется для внедрения данных из JSON в наш файл.
{title}
Мы можем следовать структуре JSON, используя точечную нотацию:
{item.author.displayName}
Ссылочный индекс (@)
@ несет в себе ссылку на элемент находящийся в области видимости — как 'this' в JavaScript
Обычно это используется чтобы отобразить HTML-код, в том случае если есть что отобразить.
Давайте взглянем на следующий пример:
<div class="title">{title}</div>
В данном случае, если {title} не существует, в HTML будет записан пустой DIV:
<div class="title"></div>
Чтобы избежать этого, инструкция может быть записана следующим образом:
{.section title}<div>{@}</div>{.end}
В результате, если названия нет, в HTML ничего не запишется.
Миниатюра
Обычно, каждый элементы коллекции (например: блога) имеет соответствующее ему изображение.
Миниатюра привязана к публикации через URL данного поста, так что получить к ней доступ давольно легко:
Каждое изображение можно получить с несколькими вариантами ширины:
original, 1500w, 1000w, 750w, 500w, 300w, 100w
Существует также специальный тест на наличие у элемента коллекции, связанного с ней изображения. Это нужно чтобы не оказаться с пустым тегом в HTML.
{.main-image?}{.end}
Например:
{.main-image?}<img src="" />{.end}
Если шаблон ожидает наличие основного изображения, вне зависимости от того загружено оно или нет, можно воспользоваться инструкцией or:
{.main-image?}
<img src="" />
{.or}
<img src="[fallback-img-URL]" />
{.end}
Множественное число
Добавляет к слову окончание «S», если значение> 1
You have {num} message{num|pluralize}.
Добавляет к слову окончание «ES», если значение> 1
They suffered {num} loss{num|pluralize es}.
Облегчает связь между существительным и глаголом
There {num|pluralize is are} {num} song{num|pluralize}.
Свой вариант (первое значение присваивается, если значение = 1, второе, если значение > 1)
{num-people|pluralize/It depends/They depend} on {num-things} thing{num-things|pluralize}.
Пример посложнее:
{.repeated section num}
{.plural?}
There are {@} people here.
{.or singular?}
There is one person here.
{.or}
There is nobody here.
{.end}
{.end}
Форматирование данных
Дата и время
Форматирование даты возможно в соответствии с форматом даты в YUI
{addedOn|date %A, %B %d}
Или в стиле твиттера
{addedOn|timesince}
Формат строки
html – пропускает html-теги (<, >, &)
{[string]|html}
htmltag – пропускает html-теги и кавычки (<, >, &, "")
{[string]|htmltag}
slugify – преобразует текст в нижний регистр, удаляет все, кроме буквенно-цифровых символов и символов подчеркивания, преобразует пробелы в дефис.
{[string]|slugify}
smartypants — переводит простые символы пунктуации ASCII в «умные» типографские знаки препинания HTML (Источник: http://daringfireball.net/projects/smartypants/)
{[string]|smartypants}
Предикаты
Это серия специфичных дополнений от Squarespace для JSON Template. Тесты для адаптации кода к конкретным ситуациям. Сервис Squarespace очень вдохновляющая штука, я напишу о ней в следующей статье. Именно при знакомстве с девелоперской частью их продукта нам и потребуются знания в JSON Template.
Все предикаты работают как этот:
{.predicate-name?}
code if the predicate test returns true
{.or}
code if it the test is not true
{.end}
Широко используемые предикаты:
Имеет ли элемент коллекции (или сама коллекция) изображение (миниатюру)?
{.main-image?}
Имеет ли элемент коллекции описание?
{.excerpt?}
Имеет ли элемент коллекции комментарии?
{.comments?}
Имеет ли элемент коллекции комментарии Disqus?
{.disqus?}
Предикаты стандартных блоков Squarespase
Имеет ли элемент конкретный тип блока?
{.promote[blockName]?}
Доступные [blockName] тесты (заменте [blockName] на один из приведенных ниже типов):
map, embed, image, code, quote, twitter, link, video, foursquare, instagram, form
Предикаты навигационных шаблонов
Является ли данный навигационный пункт внешней ссылкой?
{.external-link?}
Является ли данный навигационный пункт папкой?
{.folder?}
Другие предикаты
Имеет ли данный элемент коллекции информацию о местоположении?
{.location?}
Является ли данный элемент коллекции событием (Event)?
{.event?}
Продвинутый JSONT
Константы
Добавить безсимвольный пробел:
{.space}
Добавить табуляцию:
{.tab}
Добавить перенос строки (/n):
{.newline}
Добавить мета-данные:
{.meta-left} and {.meta-right}
Комментирование кода JSONT
Hello {# Comment} There
Настройка мета-данных
<%.meta-left%>Hello<%.meta-right%> = HTML: <%Hello%>.
Включения (или что-то вроде включений)
Можно использовать форматирование чтобы загружать шаблоны, которые используют данные в пределах определенной переменной форматирования. Включение начинается с '%' и загружает файлы шаблона.
{owner|%user-profile.jsont}
Оператор if (расширение)
Создает секцию, которая отображается если 'if' возвращает истину (truthy conditions = true || has-value). Примечание: не ограничивать область видимости.
{.if property.nestedProperty} Hello World {.end}
Вы можете использовать оператор {.or} для обработки неудавшихся тестов.
Отладка
{.Debug?}Rendered in 3 seconds{.end} { "debug" : true|false }
Хоть я и отослал Вас в начале к посту JSON и XML. Что лучше?, все же приведу пример кода JSON и здесь.
Приятный JSON
{
"widget" :
{
"widget-title" : "Navigation",
"widget-id" : 1452345,
"widget-type" : "nav",
"base-url" : "http://joshkill.com",
"items" : [
{
"title" : "Home",
"description" : "Home is where the heart is",
"icon" : "btn-home.png",
"url" : "home.html"
},
{
"title" : "Services",
"description" : "We do it all, then some",
"icon" : "btn-services.png",
"url" : "services.html"
},
{
"title" : "Contact",
"description" : "Let's work together!",
"icon" : "btn-contact.png",
"url" : "contact.html"
}
]
}
}
Уродливый JSON (в строчку)
{ "widget" : { "widget-title" : "Navigation", "widget-id" : 1452345, "widget-type" : "nav", "base-url" : "http://joshkill.com", "items" : [ { "title" : "Home", "description" : "Home is where the heart is", "icon" : "btn-home.png", "url" : "home.html" }, { "title" : "Services", "description" : "We do it all, then some", "icon" : "btn-services.png", "url" : "services.html" }, { "title" : "Contact", "description" : "Let's work together!", "icon" : "btn-contact.png", "url" : "contact.html" } ] }}
Область видимости
Я попытаюсь рассказать об области видимости, это простая концепция.
Наиболее наглядным примером определения области видимости является структура папок на компьютере при попытке найти файл. В JSON, переменная, которая содержит другие переменные похожа на папку компьютера. При нажатии в любую папку, у нас есть доступ к файлам внутри. Аналогичным образом, когда переменная в JSON находится в области видимости, у нас есть прямой доступ к другим переменных внутри.
Рассмотрим следующий пример JSON:
{
"items": [
{
"fullUrl": "/notebook/a-post-a-post",
"title": "A Post! A Post!",
"data": {
"commentCount": 0,
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque tincidunt aliquam tortor eu volutpat. Sed sem mauris, faucibus a hendrerit non, vulputate non dolor. Morbi fermentum tortor et lectus ultrices vulputate. Morbi tincid boblong sipe..."
}
},
{
"fullUrl": "/notebook/blog-ideas",
"title": "Blog Ideas",
"data": {
"commentCount": 0,
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque tincidunt aliquam tortor eu volutpat. Sed sem mauris, faucibus a hendrerit non, vulputate non dolor. Morbi fermentum tortor et lectus ultrices vulputate. Morbi rhoncus faucibus diam ..."
}
}
]
}
Переменная «items» содержит другие переменные. И внутри «items», переменная «data» тоже содержит другие переменные. О них вполне можно думать о как о папках.
Когда мы используем секцию JSON, эффект тот же что и при открытии папки на компьютере, у вас есть прямой доступ к файлам внутри.
Окей, теперь давайте посмотрим области видимости JSON Template в действии:
Пример
Если мы хотим добавить «body» для каждого элемента, можно написать так:
{.repeated section items}
{data.body}
{.end}
Или мы могли бы поместить переменные в область видимости «data»:
{.repeated section items}
{.section data}
{body}
{.end}
{.end}
Нам может быть доступно «body» повсюду, просто используем указатель "@" для доступа к переменной «body»:
{.repeated section items}
{.section data}
{.section body}
{@}
{.end}
{.end}
{.end}
Зарубежные источники? — "Да". Информация никогда не публиковалась на хабре? — «Да». Продолжение будет? — «Да».