LINUX.ORG.RU
ФорумTalks

Забавный баг на парсинге JSON

 , , ,


0

1

https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v=1DSmex4IPxg

Обратите внимание, что астральные символы закодированы через «\Uмногобукф», а не двумя сурогатами. Жабаскриптовый JSON.parse() на этом падает в хлам.

Никому нельзя верить :) . Я уже давно привык что родные url encode/decode только для отважных, но с джейсоном так первый раз нажёгся.

★★★★★

Ответ на: комментарий от Vit

а у тебя хоть что-то может раскодировать два последних символа

"\u0410\u044d\u0440\u043e\u0448\u043e\u0443 \u0432\u0435\u0440\u0442\u043e\u043b\u0451\u0442\u044b,\u0442\u0430\u043d\u043a\u0438,\u043c\u0430\u0448\u0438\u043d\u044b!\u0432\u0437\u0440\u044b\u0432\u044b!0_0 \u041f\u041e\u0421\u0422\u0410\u0412\u042c \U0001f44d\U0001f3fb!"
?

Deleted ()
Ответ на: комментарий от ZuBB

А с чего меня должно смущать содержание? Мне пофик что там. Меня интересует чтобы обрабатывалось и не падало.

Vit ★★★★★ ()
Ответ на: комментарий от Vit

Проверял на Go. Он мне сказал: «invalid character 'U' in string escape code»

Пых-пых проверить к сожалению не могу.

PS: для общественности (Vit уже видел). Попробовал запостить багрерот на страничке yt. Получил отлуп вида: «Submission failed. Please try again later». А вы говорите — пни гуглю. Они и на прошедшие багрепорты не отвечают. Их можно только оглаской достать. Корпорация добра, туды её в качель.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от beastie

Гоу тоже неплохой вариант, учитывая сферу применения :)

Что-то мне подсказывает, что много кто уверовал в святой гуглий и про эксепшены не в курсе. Осталось найти где бобманет посильнее и поделиться ссылкой :)

Vit ★★★★★ ()
Ответ на: комментарий от beastie

Перепроверил. Парсер валится.

Но ты не поверишь — с ывалом не падает!!!

x = new XMLHttpRequest();
x.open('GET', 'https://www.youtube.com/oembed?format=json&url=http://www.youtube.com/watch?v=1DSmex4IPxg', true);
x.onreadystatechange = function() {
    if (x.readyState == 4 && x.status == 200) {
        var j = eval('(' + x.responseText + ')');
        alert(j.title);
    }
};
x.send(null);

deep-purple ★★★★★ ()

ОШИБКА: неверный синтаксис для типа json
СТРОКА 1: select '{«type»: «video», «thumbnail_url»: «https:\/\/i.ytim...
^
ПОДРОБНОСТИ: Неверная спецпоследовательность: »\U".
КОНТЕКСТ: данные JSON, строка 1: ...0_0 \u041f\u041e\u0421\u0422\u0410\u0412\u042c \U...

PostgreSQL тоже не смог.

unikoid ★★★ ()
Ответ на: комментарий от deep-purple

Политика одного источника запрещает чтение удаленного ресурса на https://www.youtube.com/oembed
отсутствует заголовок CORS 'Access-Control-Allow-Origin'

Ну и как вы это обходите?
Я так понимаю гугл держит YouTube oEmbed исключительно для каких нибудь мобильных или сервер-сайд веб приложениях.

uin ★★★ ()
Ответ на: комментарий от uin

У него ведь на аватарке жопа с ушами не просто так.

Vit ★★★★★ ()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от uin

Написал этот код в консоли фаербага, а жс подумал что он на родном хосте. Но не это главное, главное что с ивалом не падает, итить колотить. Почему?

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Ну так в мане покури - что делает функция eval, или в исходниках глянь если плюсовый код понимаешь.

uin ★★★ ()
Ответ на: комментарий от uin

Покурил. Понимаю. А прикинь — гугель в апи своих карт таким образом (недопарс через JSON.parse) не дает (ну хрен с ним, сильно затрудняет) кешировать результаты геозапросов типа «москва ул пипискина д 18», т.к. возвращаемый объект координат содержит коллбеки и замыкания.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Ты меня ничем не обидел. Просто я искренне не понимаю, зачем ты пишешь в теме глупости, никому не нужные кроме тебя. Ну создай отдельный тред, и играйся там во властелина эвала и покорителя with. Я даже подскажу текущий ник местного дурачка, который с радостью составит тебе компанию.

Vit ★★★★★ ()
Ответ на: комментарий от Vit

Напомни себе когда и где впервые появился нативный парс жсона. А когда и где он появился последним и до этого не было ничего кроме эвала.

Это ты расслабился и забыл про былые победы над зоопарком браузеров. А может ты и не воевал на той войне?

Ты конечно уже подсмотрел у гугла-ютуба где и как именно оно у них парсится и почему не падает? Или может быть оформил им багрепорт? Изложил суть проблемы? Подтвердил существующий багрепорт?

Нет, ты в толксы это все принес. И чего ты ожидал тут увидеть в комментариях?

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

И чего ты ожидал тут увидеть в комментариях?

Я увидел сплошные адекватные комментарии + твой понос, тоже сплошной.

Vit ★★★★★ ()
Ответ на: комментарий от Vit

Несколько сообщений подряд — оскорбления без аргументации. Теперь ты начал угрожать?

Хочешь нормального треда — аргументируй в каких конкретных местах я, по твоему мнению, облажался и почему.

deep-purple ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.