powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Непобеждённый JSON
25 сообщений из 30, страница 1 из 2
Непобеждённый JSON
    #38224462
Доброго времени суток!

Столкнулся со следующей проблемой, есть небольшой JSON код, полученный мною путём преобразования ассоциативного массива вот этим php классом http://mike.teczno.com/JSON.tar.gz .

Сам JSON код (сори что одной строкой, просто выкладываю как есть на всякий случай):
Код: javascript
1.
{"listingContainer":"<div class=\"smallHeadDiv fnt_usual\">ВСЕ НЕЗАВЕРШЁННЫЕ ЗАКАЗЫ<\/div><div id=\"ordersList\"><\/div>","orders":[{"order_id":"11","order_date":"30-03-2013","order_status":"Новый заказ","price":"53173.5","end_price":"0"},{"order_id":"12","order_date":"02-04-2013","order_status":"Новый заказ","price":"9300","end_price":"0"},{"order_id":"13","order_date":"11-04-2013","order_status":"Новый заказ","price":"11952.5","end_price":"0"},{"order_id":"14","order_date":"13-04-2013","order_status":"Новый заказ","price":"33438.5","end_price":"0"}]}



А вот пример странички, на которой я его пытаюсь парсить, используя соответстующий метод jQuery (parseJSON): http://sportkursk.ru/test.html

Как Вам будет видно, при переходе на эту страницу, попытка парсинга оканчивается выбросом Exception.

А вот что меня ставит в ступор, так это то, что я нашёл в интернете 5 - 6 онлайн валидаторов JSON, и все они сообщили что мой JSON код валиден и без проблем его распарсили.

Объясните мне, почему здесь ( http://sportkursk.ru/test.html ) возникает ошибка?!?!? Сижу уже час в ступоре.

Заранее спасибо!
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224473
ЫLL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Климов Дмитрий,

попробуйте js-ный JSON.parse
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224480
ЫLL HEAD,

Добавил в код попытку с JSON.parse(), снова Exception...

Перезалил для наглядности тестовый файл на сервер, теперь там можно наблюдать сообщения об обеих ошибках.
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224487
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал у себя. Ошибка явно вылетает из-за экранирования \" внутри одинарных '.
2 решения: заменить \" на \' или вместо \" поставить &quot ;
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224505
IDVsbruck,

Попробовал последовать вашему совету, заменив все экранированные двойные кавычки на " , $.parseJSON съел код без ошибок, а вот JSON.parse() по прежнему чем-то недоволен.

Перезалил http://sportkursk.ru/test.html, посмотрите сейчас.
Всё равно такого быть не должно, если код валидный.

Значит ошибки где-то ешё...
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224507
ЫLL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Климов ДмитрийIDVsbruck,

Попробовал последовать вашему совету, заменив все экранированные двойные кавычки на " , $.parseJSON съел код без ошибок, а вот JSON.parse() по прежнему чем-то недоволен.

Перезалил http://sportkursk.ru/test.html, посмотрите сейчас.
Всё равно такого быть не должно, если код валидный.

Значит ошибки где-то ешё...надо было
авторзаменить \" на \'у меня так робит
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224518
ЫLL HEAD,

Обновил страницу: http://sportkursk.ru/test.html

Как видно, воз поныне там, JSON.parse() выбрасывает Exception и с одинарными экранированными кавычками...

Но меня даже больше не интересует не тот вопрос, чем заменить \" , для того, чтобы оба метода корректо отработали JSON код, а то, почему вот этот (к примеру) валидатор: http://paulisageek.com/json_validator/ отлично парсит исходный JSON без всяких правок и замен?!?!

Посмотрел исходный код его страницы, делает он всё то же самое, что и мой скрипт.
И у них код, вставленный копипастом, парсится с $.parseJSON без ошибок.

Как такое возможно? Я проклят?
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224563
ЫLL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по вашей страничке, не победили еще
у меня это работает:
у меня это работает
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<html><head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<script src="http://code.jquery.com/jquery-1.4.2.js"></script>
</head>
<body>
<script type="text/javascript">
var data = '{"listingContainer":"<div class=\'smallHeadDiv fnt_usual\'>ВСЕ НЕЗАВЕРШЁННЫЕ ЗАКАЗЫ<\/div><div id=\'ordersList\'><\/div>","orders":[{"order_id":"11","order_date":"30-03-2013","order_status":"Новый заказ","price":"53173.5","end_price":"0"},{"order_id":"12","order_date":"02-04-2013","order_status":"Новый заказ","price":"9300","end_price":"0"},{"order_id":"13","order_date":"11-04-2013","order_status":"Новый заказ","price":"11952.5","end_price":"0"},{"order_id":"14","order_date":"13-04-2013","order_status":"Новый заказ","price":"33438.5","end_price":"0"}]}';

try{
	//data = JSON.parse(data); // это робит
	data = $.parseJSON(data); // и это робит
	alert('ok');	
}catch(err){
	alert(err);
}
</script>запускал в хроме
</body></html>

...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224746
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не надо экранировать символ /
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224759
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может php-шный класс мутит? У меня на сервере при сериализации закрывающий слэш / и одинарная кавычка ' не экранируются, вместо шифрограммы ВСЕ используются обычные русские буквы, вроде всё работает через стандартный JSON.parse(req.responseText).

Ваш код кстати нормально отрабатывает, присылаемый с сервера в таком виде в каком представлен в первом сообщений. А когда в javascript оборачиваете в ' ' при присвоении переменной, тогда и начинаются глюки. Если нужно формировать json именно на клиенте, то для этого есть -

var json = JSON.stringify({"тут объект со всей этой длинной шняжкой"});
alert(result.listingContainer);
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224764
ЫLL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько знаю из регекспов, хоть каждый символ экраниру, беды от этого не будет
в джсон не так? проверять лень )

в пхп юзаю json_encode . на клиенте - JSON.parse . и что там заэкранировано - не интересовался )
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224766
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Мечне надо экранировать символ /+
Если экранировать символ /, то получим вместо закрывающего тега обычную строку, например "</div>" входящую в тег как текст. Явная ошибка.
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224770
ЫLL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsЕсли экранировать символ /, то получим вместо закрывающего тега обычную строку, например "</div>" входящую в тег как текст. Явная ошибка.я проверил на этом:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
data = '{"tag DIV":"<div><\/div>"}';

try{
	//data = JSON.parse(data); // это робит
	data = $.parseJSON(data); // и это робит
	alert('ok');
	for (d in data)	{
		console.log(data[d]);
	}
}catch(err){
	alert(err);
}


в консоли:
Код: plaintext
<div></div> 
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224773
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что с экранированием /, что без него, разницы пока не заметил.

автору -
Код: javascript
1.
2.
3.
	var json = JSON.stringify({"listingContainer":"<div class=\"smallHeadDiv fnt_usual\">ВСЕ НЕЗАВЕРШЁННЫЕ ЗАКАЗЫ<\/div><div id=\"ordersList\"><\/div>","orders":[{"order_id":"11","order_date":"30-03-2013","order_status":"Новый заказ","price":"53173.5","end_price":"0"},{"order_id":"12","order_date":"02-04-2013","order_status":"Новый заказ","price":"9300","end_price":"0"},{"order_id":"13","order_date":"11-04-2013","order_status":"Новый заказ","price":"11952.5","end_price":"0"},{"order_id":"14","order_date":"13-04-2013","order_status":"Новый заказ","price":"33438.5","end_price":"0"}]});
	var result = JSON.parse(json);
	alert("listingContainer = " + result.listingContainer + ";\n\n order_date = " + result.orders[0].order_date);
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224777
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsЕсли экранировать символ /, то получим вместо закрывающего тега обычную строку, например "</div>" входящую в тег как текст. Явная ошибка.Не из той темы прогнал, сорри.
Вот разные наглядные варианты с кавычками
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<!doctype html>
<html>
<head>
<script type="text/javascript">
function myF(el) {
el.innerHTML=JSON.parse('{"my":"<div>text</div>"}').my; // - Работает
//el.innerHTML=JSON.parse("{'my':'<div>text</div>'}").my; // - Exception
//el.innerHTML=JSON.parse('{"my":"<div style=\'background:#ffffff\'>text</div>"}').my; // - Работает
//el.innerHTML=JSON.parse('{"my":\'<div style="background:#ffffff">text</div>\'}').my; // - Exception
}
</script>
</head>
<body>
<div id="myID" style="cursor:pointer; width:100px; height:100px; background:#808080" onclick="myF(this)"></div>
</body>
</html>
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224784
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck2 решения: заменить \" на \' или вместо \" поставить &quot ; &quot тоже работает.
(почему-то Opera при этом ругается Declaration syntax error "background:#ffffff", но работает!)
Код: javascript
1.
el.innerHTML=JSON.parse('{"my":"<div style="background:#ffffff">text</div>"}').my;
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224785
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
&quot
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38224786
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то смутно припоминаю, что в json одинарная кавычка не экранируется и её нельзя использовать к примеру так -

{
'my': '<div>text</div>'
}

но можно так -

{
"my": "<div style='background:#ffffff'>text</div>"
}

короче более подробно это в документацию лезть надо.
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225291
qwerty2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое первое
JSON.parse(data); тут в дата должна быть строка а ты суешь ей массив обьектов
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225292
qwerty2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225491
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.
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225516
IDVsbruck , я даже дальше пошёл, и заменил \" на " , но, опять же, это заставило работать только $.parseJSON, что нужно для того, чтобы и JSON.parse() не чюдил хз.
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225524
заменил на decimal код (на форуме в посте выше он превратился в кавычку): " ;
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225570
qwerty2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Климов Дмитрий st_st
qwerty2012
Если проверите тип переменной data, то увидете, что это string, а ни как не object.
Продебаж код ясно все станет сразу

стрингифи из обьекта в жейсон строку перегоняет
а ты ей строку же и подсовываешь
...
Рейтинг: 0 / 0
Непобеждённый JSON
    #38225591
qwerty2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<!-- saved from url=(0030)http://sportkursk.ru/test.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
	<script src="./test_files/jquery-1.4.2.js"></script>
</head>
<body>
<script type="text/javascript">
var data = '{"listingContainer":"<div class=&#34;smallHeadDiv fnt_usual&#34;>ВСЕ НЕЗАВЕРШЁННЫЕ ЗАКАЗЫ<&#47div><div id=&#34;ordersList&#34;><&#47div>","orders":[{"order_id":"11","order_date":"30-03-2013","order_status":"Новый заказ","price":"53173.5","end_price":"0"},{"order_id":"12","order_date":"02-04-2013","order_status":"Новый заказ","price":"9300","end_price":"0"},{"order_id":"13","order_date":"11-04-2013","order_status":"Новый заказ","price":"11952.5","end_price":"0"},{"order_id":"14","order_date":"13-04-2013","order_status":"Новый заказ","price":"33438.5","end_price":"0"}]}';
try{
	data = $.parseJSON(data);
	alert('$.parseJSON(): ok');
}catch(err){
	alert('$.parseJSON():' + "\r\n\r\n" + err);
}
try{
	data = JSON.stringify(data);
	alert('JSON.parse: ok');
}catch(err){
	alert('JSON.parse:' + "\r\n\r\n" + err);
}
alert(data);
</script>

</body></html>
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Непобеждённый JSON
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]