Не удается проанализировать объект JSON из в javascript из thymeleaf

#javascript #json #thymeleaf

#javascript #json #thymeleaf

Вопрос:

В контроллер я поместил простой java-объект, сопоставленный с JSON с помощью jackson.

     Station station = stationRepo.findFirstByCodeEquals(320007);

    ObjectMapper objectMapper = new ObjectMapper();
    String JSONstation = objectMapper.writeValueAsString(station);
    model.addAttribute("station",JSONstation);
  

Во внешнем интерфейсе я использую Thymeleaf для получения этого объекта в теге:

 <p id="test" th:text="${station}">Test 1</p>
<p id="test2">Test 2</p>
<p id="test3">Test 3</p>
  

И я просто получаю этот объект JSON в javascript, используя document.getElementById («test»).innerText, и анализирую его в объект js.

     var JSONtest = "[[${station}]]";
    var JSONstation = document.getElementById("test").innerText;

    document.getElementById("test2").innerHTML = typeof JSONtest;

    var jsStation = JSON.parse(JSONstation);


    document.getElementById("test3").innerHTML = JSONtest.rusName;
  

Но когда я пытаюсь получить объект JSON из thymeleaf, используя var JSONtest = «[[${station}]]», я не могу разобрать его в объект js, но они одинаковы.
Что я делаю не так в этом коде?

Комментарии:

1. Я думаю, вы имели в виду var JSONtest = `[[${station}]]`; — вам нужно заключить строку в обратные метки, чтобы использовать ${..} синтаксис интерполяции

Ответ №1:

Когда вы используете переменные Thymeleaf в JavaScript, вы не должны передавать их как String . Вместо этого вы должны добавить переменную в модель, как обычно:

 model.addAttribute("station", station);
  

и пусть Thymeleaf автоматически переведет его на JavaScript (он обработает перевод вашего объекта в JSON, вам не нужно использовать Jackson):

 <script th:inline="javascript">
    var JSONtest = /*[[${station}]]*/ {};
</script>
  

Комментарии:

1. Отлично, это проще, чем я думал. Я просто прохожу через такую конструкцию, потому что я думал, что это закомментированный блок кода.