|
|
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Столкнулся со следующей проблемой, есть небольшой JSON код, полученный мною путём преобразования ассоциативного массива вот этим php классом http://mike.teczno.com/JSON.tar.gz . Сам JSON код (сори что одной строкой, просто выкладываю как есть на всякий случай): Код: javascript 1. А вот пример странички, на которой я его пытаюсь парсить, используя соответстующий метод jQuery (parseJSON): http://sportkursk.ru/test.html Как Вам будет видно, при переходе на эту страницу, попытка парсинга оканчивается выбросом Exception. А вот что меня ставит в ступор, так это то, что я нашёл в интернете 5 - 6 онлайн валидаторов JSON, и все они сообщили что мой JSON код валиден и без проблем его распарсили. Объясните мне, почему здесь ( http://sportkursk.ru/test.html ) возникает ошибка?!?!? Сижу уже час в ступоре. Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 17:16 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Климов Дмитрий, попробуйте js-ный JSON.parse ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 17:30 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
ЫLL HEAD, Добавил в код попытку с JSON.parse(), снова Exception... Перезалил для наглядности тестовый файл на сервер, теперь там можно наблюдать сообщения об обеих ошибках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 17:38 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Попробовал у себя. Ошибка явно вылетает из-за экранирования \" внутри одинарных '. 2 решения: заменить \" на \' или вместо \" поставить " ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 17:48 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, Попробовал последовать вашему совету, заменив все экранированные двойные кавычки на " , $.parseJSON съел код без ошибок, а вот JSON.parse() по прежнему чем-то недоволен. Перезалил http://sportkursk.ru/test.html, посмотрите сейчас. Всё равно такого быть не должно, если код валидный. Значит ошибки где-то ешё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 18:07 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Климов ДмитрийIDVsbruck, Попробовал последовать вашему совету, заменив все экранированные двойные кавычки на " , $.parseJSON съел код без ошибок, а вот JSON.parse() по прежнему чем-то недоволен. Перезалил http://sportkursk.ru/test.html, посмотрите сейчас. Всё равно такого быть не должно, если код валидный. Значит ошибки где-то ешё...надо было авторзаменить \" на \'у меня так робит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 18:11 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
ЫLL HEAD, Обновил страницу: http://sportkursk.ru/test.html Как видно, воз поныне там, JSON.parse() выбрасывает Exception и с одинарными экранированными кавычками... Но меня даже больше не интересует не тот вопрос, чем заменить \" , для того, чтобы оба метода корректо отработали JSON код, а то, почему вот этот (к примеру) валидатор: http://paulisageek.com/json_validator/ отлично парсит исходный JSON без всяких правок и замен?!?! Посмотрел исходный код его страницы, делает он всё то же самое, что и мой скрипт. И у них код, вставленный копипастом, парсится с $.parseJSON без ошибок. Как такое возможно? Я проклят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 18:27 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
судя по вашей страничке, не победили еще у меня это работает: у меня это работает Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 19:37 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
не надо экранировать символ / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 02:27 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Может php-шный класс мутит? У меня на сервере при сериализации закрывающий слэш / и одинарная кавычка ' не экранируются, вместо шифрограммы ВСЕ используются обычные русские буквы, вроде всё работает через стандартный JSON.parse(req.responseText). Ваш код кстати нормально отрабатывает, присылаемый с сервера в таком виде в каком представлен в первом сообщений. А когда в javascript оборачиваете в ' ' при присвоении переменной, тогда и начинаются глюки. Если нужно формировать json именно на клиенте, то для этого есть - var json = JSON.stringify({"тут объект со всей этой длинной шняжкой"}); alert(result.listingContainer); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 06:31 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
насколько знаю из регекспов, хоть каждый символ экраниру, беды от этого не будет в джсон не так? проверять лень ) в пхп юзаю json_encode . на клиенте - JSON.parse . и что там заэкранировано - не интересовался ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 07:58 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Яростный Мечне надо экранировать символ /+ Если экранировать символ /, то получим вместо закрывающего тега обычную строку, например "</div>" входящую в тег как текст. Явная ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 08:30 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
aswsЕсли экранировать символ /, то получим вместо закрывающего тега обычную строку, например "</div>" входящую в тег как текст. Явная ошибка.я проверил на этом: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. в консоли: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 09:00 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Что с экранированием /, что без него, разницы пока не заметил. автору - Код: javascript 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 09:16 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
aswsЕсли экранировать символ /, то получим вместо закрывающего тега обычную строку, например "</div>" входящую в тег как текст. Явная ошибка.Не из той темы прогнал, сорри. Вот разные наглядные варианты с кавычками Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 09:31 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
IDVsbruck2 решения: заменить \" на \' или вместо \" поставить " ; " тоже работает. (почему-то Opera при этом ругается Declaration syntax error "background:#ffffff", но работает!) Код: javascript 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 09:54 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Что-то смутно припоминаю, что в json одинарная кавычка не экранируется и её нельзя использовать к примеру так - { 'my': '<div>text</div>' } но можно так - { "my": "<div style='background:#ffffff'>text</div>" } короче более подробно это в документацию лезть надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 09:56 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Самое первое JSON.parse(data); тут в дата должна быть строка а ты суешь ей массив обьектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 07:52 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
st_st Спасибо, буду использовать JSON.stringify() После обрабоки данным методом $.parseJSON начинает корректно работать, не в пример JSON.parse().. Но я уже подустал копать, просто хочу доделать проект и забыть о нём, так что останавлюсь на JSON.stringify(). ЫLL HEAD По поводу заменой \" на \' , вариавнт работает с $.parseJSON, но мне не совсем подходит по той причине, что в закодированной строке с названием товара могут одновременно использоваться как одинарная, так и двойная ковычка, например, у товара может быть заголовок: Men's Shoes Puma "FX500" Поэтому нежелательно насовсем прощаться с двойной кавычкой. Яростный мечь По поводу снятия экранирования со слэшей закрывающих HTML тэги внутри JSON кода, непонятно как они в принципе могут сказаться на работу хоть $.parseJSON, хоть JSON.parse. На всякий случай попробовал убрать - не помогло. qwerty2012 Если проверите тип переменной data, то увидете, что это string, а ни как не object. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 11:27 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
IDVsbruck , я даже дальше пошёл, и заменил \" на " , но, опять же, это заставило работать только $.parseJSON, что нужно для того, чтобы и JSON.parse() не чюдил хз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 11:40 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
заменил на decimal код (на форуме в посте выше он превратился в кавычку): " ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 11:42 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Климов Дмитрий st_st qwerty2012 Если проверите тип переменной data, то увидете, что это string, а ни как не object. Продебаж код ясно все станет сразу стрингифи из обьекта в жейсон строку перегоняет а ты ей строку же и подсовываешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:05 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:12 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
вот тебе еще наводка оба кода верхний и этот рабочие Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:16 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Да, stringify в последней редакции test.html я использовал некорректно, т.к. передал ему строку вместо объекта, запарился. Теперь всё работает с обоими методами =) qwerty2012 , если я правильно понял, Вы просто заменили в JSON коде Decimal кодами следующие последовательности? 1. \" 2. \/ Я чуть раньше делал то же самое, и у меня JSON.parse() не хотел работать, видать я где-то опечатку в коде делал. Вопрос решён. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 12:44 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Климов ДмитрийДа, stringify в последней редакции test.html я использовал некорректно, т.к. передал ему строку вместо объекта, запарился. Теперь всё работает с обоими методами =) qwerty2012 , если я правильно понял, Вы просто заменили в JSON коде Decimal кодами следующие последовательности? 1. \" 2. \/ Я чуть раньше делал то же самое, и у меня JSON.parse() не хотел работать, видать я где-то опечатку в коде делал. Вопрос решён. Спасибо! нет не в этом дело в первом примере который я испаравил было так сначачала дата это строка вида джесон потом в эту же дату присваеваеться обьект как результат data = $.parseJSON(data); а тут дата уже обьект которые перегоняеться в строку data = JSON.stringify(data); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 13:08 |
|
||
|
Непобеждённый JSON
|
|||
|---|---|---|---|
|
#18+
Вобщем рано я радовался... Получается бредовая ситуация, как ни крути. Опишу ситуацию в целом: 1. Есть html шаблон, в котором идёт вызов JS ф-ции (с единственным аргуметом): Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. При сборке страницы контсрукцию [:JSON_CODE:] php скрипт заменяет строкой JSON кода. Если быть уверенным в том, что php скрипт при всех условиях будет работат идеально и без ошибок, то контсрукцию [:JSON_CODE:] одинарными кавычками можно не обрамлять, и myFunction() может слепо пробовать работать с переданным аргументом как с объектом JSON, без использования JSON.parse или $.parseJSON Однако стоит скрипту ошибиться и выдать вместо валидного JSON какую-нибудь ерунду, как JS молча отомрёт. Поэтому я решил добавить одинарные кавычки обрамляющие [:JSON_CODE:], чтобы быть уверенным в том, что JS функция myFunction() получит аргумент ТОЛЬКО В ВИДЕ СТРОКИ, что позволит проверять валидность её содержимого уже средствами JS. И исходя из результатов этой проверки, либо сообщить об ошибке, либо продолжать работу. Но не умирать молча. Но получается такая хрень (как показала практика): чтобы переданный в виде обрамленной одинарными кавычками JSON спарсился, он не должен содержать в себе конструкций \" и \/ . Их товарищ qwerty2012 заменил соотвтествующими decimal кодами. После замены этих конструкций, парсинг JSON проходит отлично, но строки из распарсеного объекта JSON содержавшие в себе html тэги "портятся", т.к. decimal представления в них "остаются собой" и не преобразуются ни в " ни в /, соответственно html тэги в этих строках херятся. В итоге, после парсинга такого JSON, эти коды нужно отлавливать в разных местах и преобразовывать обратно к нормальному виду регулярками, что не удобно: в разных местах сайта генерируеются JSON разных конструкций, который обрабатывается множеством разных не связанных между собой ф-ций... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 15:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=22&tid=1448449]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 485ms |

| 0 / 0 |
