Как правильно передать 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> Подскажите где я допускаю ошибку. |
Цитата:
|
Уточните пожалуйста свой ответ.
чем отличается тот случай от этого 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 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); |
Сначала надо вывести в лог или что там в жсп есть то, что получилось после
var jsonString='<c:out value="${json_text}"/>'; |
Ваши сомнения понятны.
Предполагаете, что в 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}"/>'; должно все быть по-другому? |
laimas, да это же серверный шаблон, то есть этот JSP получает var jsonString='<c:out value="${json_text}"/>'; и что-то там себе на уме согласно его моделям и прототипам присваивает. Поэтому в строке уже не будет '<c:out value="${json_text}"/>', а должен быть тот текст, который внутри тега c:out. Но что именно там получается в этой фазе - хз. Это и надо выяснить.
|
Цитата:
var JSONFromJSTL='<c:out value="{"a":1}"/>'; это не будет являться JSON. |
drno-reg, так у тебя небось там все эти не альфа-нумерики кодируются для хтмля его ентитьками. То есть, тебе надо смотреть НЕ на страницу, а в исходник страницы, или выводить через функцию, которая обратно декодирует все ентитьки. А иначе откуда амперсанд.
|
Ну то есть
Цитата:
|
Цитата:
|
Цитата:
|
Зато ты гений, так что сможешь прочесть https://en.wikipedia.org/wiki/JavaServer_Pages
|
Еще раз - ты дебил:
try { var s = JSON.parse("<c:out />"); } catch (e) { alert(e) } Надоел твой срач на форуме. Мне нахрен не нужны твои тупые разъяснения. |
Цитата:
|
Цитата:
Читай, знаток хренов - var jsonString='<c:out value="${json_text}"/>'; |
вот так заработало
<script type="text/javascript"> var jsonObj = ${json_text}; var jsonResult = []; jsonResult.push("Вывод JSON="+'<c:out value="${json_text}"/>'); jsonResult.push("количество строк json="+jsonObj.length); result_json.innerHTML = jsonResult.join('<br>'); </script> |
Четвертый раз не хочет понять. Интересно до десяти домотает?
Цитата:
|
drno-reg, ты тоже похоже херней занимаешься. Найти в своем фрейморке теги вывода без преобразования в html entities.
|
Цитата:
|
Цитата:
Короче, пятый раз ты не хочешь понимать олень. Если бы переменной присваивалось что написано - '<c:out value="${json_text}"' - то при выводе на страницу оно и было бы в точности как есть, а ТС пишет что на страницу выводится его json, а не эта хрень <c:out value="${json_text}" да и потом где тут & на символе с индексом 2? |
ТС, иди на форум по JSP и там узнавай как вывести json текст as is, без преобразования в ентитьки.
|
У него вместо [{"TIME_STAMP":.. выводится [{"TIME_STAMP":... поэтому дамп на веб-странице выглядит правильно, а парситься не желает. Дубовое решение заменить куоты на двойную кавычку
var jsonObj = JSON.parse(jsonString.replace(/"/g,'"')); Но лучше найти кто кодирует строку и сказать ему, что так делать не надо. |
Часовой пояс GMT +3, время: 09:16. |