Цикл через JSON в шаблоне Сельмера

Я делаю простую игру-викторину и хочу сохранить вопросы в файле JSON следующим образом:

{"questions":
    [  
      {  
         "question":"2+2 ?",
         "answer_A":1,
         "answer_B":2,
         "answer_C":3,
         "answer_D":4,
         "correct_answer":4
      },
      {  
         "question":"2+3?",
         "answer_A":1,
         "answer_B":2,
         "answer_C":3,
         "answer_D":5,
         "correct_answer":5
      }    
  ] }

Это код для загрузки из файла:

defn json-page []
(layout/render
    "json.html" {:file (parse-string (slurp "path/to/file"))}))

parse-string возвращает строку, поэтому я не могу перебрать ее, чтобы отобразить каждый элемент. Как я могу это сделать? Я знаю синтаксис ({% for question in file %}), но не знаю, как получить доступ к вложенным элементам.


person Cosaquee    schedule 31.08.2015    source источник


Ответы (1)


Спасибо Reddit за ответ:

(defn json-page []
    (layout/render
        "json.html" {:file (parse-string (slurp "path/to/file") true)}))

Ответ заключался в том, чтобы добавить true в качестве параметра для parse-string, чтобы использовать карты json по ключевым словам. После этого я могу перебрать json:

{% for question in file.questions %}
        <p>{{ question.question }}.</p>
        {{ question.answer_A}}
        {{ question.answer_B}}
        {{ question.answer_C}}
        {{ question.answer_D}}
 {% endfor %} 
person Cosaquee    schedule 31.08.2015