Заменить символ в необработанных данных перед синтаксическим анализом в JSON с помощью node-fetch

Я пытаюсь получить необработанные данные с веб-сайта и преобразовать их в JSON, но проблема в том, что данные используют одинарные кавычки вместо двойных кавычек, что дает ошибку

UnhandledPromiseRejectionWarning: FetchError: недопустимое тело ответа json в (WEBSITE_LINK) причина: неожиданный токен 'в JSON в позиции 1

Если я открою страницу в своем браузере, данные будут выглядеть так: {'test': True, 'number': 0}

Как преобразовать одинарные кавычки в двойные кавычки перед их анализом в JSON с помощью следующего кода?

let url = `WEBSITE_LINK`;
let settings = { method: "Get" };
fetch(url, settings)
   .then(res => res.json())
   .then((json) => {
         console.log(json.test)
         console.log(json.number)
    });

person EvernoteMC    schedule 01.10.2020    source источник
comment
True также следует заменить на true   -  person James Rushford    schedule 01.10.2020
comment
Причина, по которой он недействителен json, заключается в том, что слово - True не является допустимым javascript. Попросите поставщика серверной части предоставить вам истинные строчные буквы.   -  person Steve Tomlin    schedule 01.10.2020


Ответы (2)


Вы можете использовать js String replace метод ad анализирует возвращаемое жало вручную.

let url = `WEBSITE_LINK`;
let settings = { method: "Get" };
fetch(url, settings)
   .then(res => res.text())
   .then((text) => {
         const json = JSON.parse(text.replace(/'/g, '"'));
         console.log(json.test);
         console.log(json.number);
    });
person pharingee    schedule 01.10.2020
comment
Большое спасибо за ваш ответ! К сожалению, я получаю сообщение об ошибке, когда пытаюсь выполнить этот код: (node:18872) UnhandledPromiseRejectionWarning: TypeError: res.text(...).replace is not a function - Я попытался изменить его на res.text (). ToString.replace, но это тоже не сработало. - person EvernoteMC; 01.10.2020
comment
Ах да, res.text возвращает обещание. Вы можете выполнить синтаксический анализ в другом, а затем позвонить - person pharingee; 01.10.2020

Используйте конструктор String, чтобы преобразовать ответ в строку, а затем примените метод замены.

let url = `WEBSITE_LINK`;
let settings = {
  method: "Get"
};
fetch(url, settings)
  .then(res => {
    const text = String(res.text()).replace(/'/g, '"');
    return JSON.parse(text);
  })
  .then((json) => {
    console.log(json.test)
    console.log(json.number)
  });

person Lahiru Tennakoon    schedule 01.10.2020
comment
Как мне также изменить True на true? - person EvernoteMC; 01.10.2020
comment
Вы можете использовать метод toLowerCase (). - person Lahiru Tennakoon; 01.10.2020