Последнее время использую nodejs в своих задумках, и тут столкнулся с проблемой парсинга Json.
В коде html внутри тэга
<script>
есть закодированный JSON, который распознается функцией parse().
<script>
var variable = JSON.parse('\x7B\x22id\x22\x3A.......');
</script>
Я его спарсил регулярным выражением
const regex = new RegExp(`variable.+JSON\\.parse\\(\\'([^\\']+)\\'\\)\\;`);
Но когда я уже пытался распознать полученное функцией JSON.parse я получал ошибку
SyntaxError: Unexpected token \ in JSON at position 0
, но самое главное если просто в коде вставить полученную строку она парсилась замечательно.
const variable = '\x7B\x22id\x22\x3A.......';
JSON.parse(variable);
Не знаю почему так происходит, видимо не может как то изменить кодировку на лету…
В общем на помощь мне пришла такая самописная функция, для простоты использование расширим прототип String.
String.prototype.decodeEscapeSequence = function() {
return this.replace(/\\x([0-9A-Fa-f]{2})/g, function() {
return String.fromCharCode(parseInt(arguments[1], 16));
});
};
И теперь используем
String.prototype.decodeEscapeSequence = function() {
return this.replace(/\\x([0-9A-Fa-f]{2})/g, function() {
return String.fromCharCode(parseInt(arguments[1], 16));
});
};
const html = getHtmlPage();
const regex = new RegExp(`variable.+JSON\\.parse\\(\\'([^\\']+)\\'\\)\\;`);
const match = html.match(regex);
if (match.length === 2) {
const json = match[1].decodeEscapeSequence();
const result = JSON.parse(json);
}
В
result должен быть объект полученный из json который мы спарсили с сайта.
Комментарии ()