2

Получаю get-запросом следующую строку:

[
    {
        "name": "Основная"
    }
]

Помогите пропарсить в массив. Пробую так:

var answer; // тот самый ответ сервера
result = JSON.parse(answer);

Синтаксис валится на второй строке с ошибкой:

undefined:1
[
^

SyntaxError: Unexpected token  in JSON at position 0
   at JSON.parse (<anonymous>)

Полный листинг кода:

var options = {
    host: 'localhost',
    path: '/xxx',
    headers: {
        Authorization: 'xxx'
    }
}

http.request(options, (response) => {
    var answer = '';
    response.on('data', (chunk) => {
        answer += chunk;
    });

    response.on('end', () => {
        console.log(typeof answer);
        answer = JSON.parse(answer);
        console.log(answer);
}).end()

Вот логи консоли:

string
[
    {
        "name": "Основная"
    }
]

дальше описание ошибки:

undefined:1
[
^

SyntaxError: Unexpected token  in JSON at position 0
    at JSON.parse (<anonymous>)
    at IncomingMessage.res.on (D:\Work\Dev\node.js\svoboda\requestHandlers.js:25:27)
    at IncomingMessage.emit (events.js:187:15)
    at endReadableNT (_stream_readable.js:1094:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Process finished with exit code 1
  • @Дмытрык, 1) http.request(options[, callback]) - это с документации ноды. 2) с этого адреса я получаю данные, о чем свидетельствует и отладка и логи в консоли – Рустам Халилов Dec 21 '18 at 11:19
  • Мы Вашку отладку и логи в консоли не видим. А видим мы то, что answer является строкой уже при объявлении. – Dmytro Dec 21 '18 at 11:25
  • @Дмытрык отредактировал пост – Рустам Халилов Dec 21 '18 at 11:30
  • 1
    Судя по логами, у вас все нормально парсится. Т.е. показывается string и JSON. Ошибка скорее всего происходит позже, когда снова начинает работать событие data. Поставьте console.log(answer) в событии data. Такое ощущение, что после end опять происходит data, потом end и вот здесь уже ошибка. – Stepan Kasyanenko Dec 21 '18 at 11:36
  • 1
    Разобрался. В строке answer за счет форматирования были \r \t \n и прочие, почистил их перед парсингом и все отработало. – Рустам Халилов Dec 21 '18 at 11:42