Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2016, 13:43
Интересующийся
Отправить личное сообщение для drno-reg Посмотреть профиль Найти все сообщения от drno-reg
 
Регистрация: 16.02.2016
Сообщений: 23

Как правильно передать JSON из JSTL в Java Script?
Здравствуйте.

Пытаюсь из JSP передать JSON в JavaScript.

<c:set var="json_text">
    [{"TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_ALL", "VALUE": 635 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "QUALITY", "VALUE": 99.84 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_ALL", "VALUE": 642 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "QUALITY", "VALUE": 99.84 }]
    </c:set>

 <script type="text/javascript">
var jsonString='<c:out value="${json_text}"/>';
var jsonObj = JSON.parse(jsonString);
</script>



Воспроизводится ошибка
Uncaught SyntaxError: Unexpected token & in JSON at position 2

НО если взять и целиком скопировать содержимое
напрямую в Java script, то все работает.

<script type="text/javascript">
var jsonString='[{"TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_ALL", "VALUE": 635 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "QUALITY", "VALUE": 99.84 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_ALL", "VALUE": 642 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "QUALITY", "VALUE": 99.84 }]';
var jsonObj = JSON.parse(jsonString);
</script>



Подскажите где я допускаю ошибку.
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2016, 14:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от drno-reg
где я допускаю ошибку
В строке 6 jsonString не является JSON.
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2016, 14:35
Интересующийся
Отправить личное сообщение для drno-reg Посмотреть профиль Найти все сообщения от drno-reg
 
Регистрация: 16.02.2016
Сообщений: 23

Уточните пожалуйста свой ответ.

чем отличается тот случай от этого
var jsonString='[{"TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_ALL", "VALUE": 635 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "QUALITY", "VALUE": 99.84 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_ALL", "VALUE": 642 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "QUALITY", "VALUE": 99.84 }]';
?
Ответить с цитированием
  #4 (permalink)  
Старый 10.08.2016, 14:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от drno-reg
чем отличается тот случай от этого

var jsonString='<c:out value="${json_text}"/>';
alert(jsonString);
jsonString='[{"TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_ALL", "VALUE": 635 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "QUALITY", "VALUE": 99.84 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_ALL", "VALUE": 642 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "QUALITY", "VALUE": 99.84 }]';
alert(jsonString);
Ответить с цитированием
  #5 (permalink)  
Старый 10.08.2016, 14:52
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сначала надо вывести в лог или что там в жсп есть то, что получилось после

var jsonString='<c:out value="${json_text}"/>';
Ответить с цитированием
  #6 (permalink)  
Старый 10.08.2016, 14:54
Интересующийся
Отправить личное сообщение для drno-reg Посмотреть профиль Найти все сообщения от drno-reg
 
Регистрация: 16.02.2016
Сообщений: 23

Ваши сомнения понятны.
Предполагаете, что в jsonString='<c:out value="${json_text}"/>';
передается строка <c:out value="${json_text}"/>.
НО это не так, JSTL тег срабатывает и передает полностью значение.
Для проверки я сделал так
<script type="text/javascript">
var JSONFromJSTL='<c:out value="${json_text}"/>';
jsonResult.push("Вывод JSON="+JSONFromJSTL);
result_json.innerHTML = jsonResult.join('<br>');
  </script>


в
<div id="result_json"></div>

получаю такой результат

Вывод JSON=[{"TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_ALL", "VALUE": 635 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:30:22", "COUNTER": "QUALITY", "VALUE": 99.84 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_ALL", "VALUE": 642 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "COUNT_BAD", "VALUE": 1 }, { "TIME_STAMP": "2016-07-25 02:31:22", "COUNTER": "QUALITY", "VALUE": 99.84 }]

Почему в случае var jsonString='<c:out value="${json_text}"/>';
должно все быть по-другому?
Ответить с цитированием
  #7 (permalink)  
Старый 10.08.2016, 14:55
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

laimas, да это же серверный шаблон, то есть этот JSP получает var jsonString='<c:out value="${json_text}"/>'; и что-то там себе на уме согласно его моделям и прототипам присваивает. Поэтому в строке уже не будет '<c:out value="${json_text}"/>', а должен быть тот текст, который внутри тега c:out. Но что именно там получается в этой фазе - хз. Это и надо выяснить.
Ответить с цитированием
  #8 (permalink)  
Старый 10.08.2016, 14:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от drno-reg
Предполагаете, что
Не предполагаю, а знаю, ибо даже если бы

var JSONFromJSTL='<c:out value="{"a":1}"/>';

это не будет являться JSON.
Ответить с цитированием
  #9 (permalink)  
Старый 10.08.2016, 14:57
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

drno-reg, так у тебя небось там все эти не альфа-нумерики кодируются для хтмля его ентитьками. То есть, тебе надо смотреть НЕ на страницу, а в исходник страницы, или выводить через функцию, которая обратно декодирует все ентитьки. А иначе откуда амперсанд.
Ответить с цитированием
  #10 (permalink)  
Старый 10.08.2016, 15:07
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Ну то есть

Цитата:
Unexpected token & in JSON at position 2
На позиции 2 (zero-based) двойная кавычка, которая на выводе преобразуется в &quot; которую в хтмле при проверке ты видишь как двойную кавычку, а парсер охреневает. Открывай исходник веб-страницы и все увидишь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
$.getJSON как правильно передать данные inflexible AJAX и COMET 4 05.08.2015 00:36
Как правильно записать данные в JSON Alex_D181 Angular.js 1 19.06.2015 13:01
как правильно обращаться к свойствам объект внутри самого объекта ? mitiya Общие вопросы Javascript 12 25.04.2015 21:18
как передать данные из json в названия параметров shultz1988 Общие вопросы Javascript 2 20.07.2011 11:15
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20