SyntaxError: неожиданный токен / в JSON в позиции 0

Здравствуйте, прежде чем помечать это как дубликат, обратите внимание, что я пробовал это и это решение, и они оба у меня не работали . Я запускаю дочерний процесс в Node.JS, и процесс запускает файл python, скрипт python в конце выгружает список словарей в JSON, который действителен, поскольку я проанализировал этот json на этом веб-сайте. Основная проблема заключается в том, что собранный json не анализируется в Node.JS, он показывает следующую ошибку

SyntaxError: неожиданный токен / в JSON в позиции 0

Фрагмент кода следующий

let output = '';
model = spawn("python3", ["./scanners/python/scan.py", code]);

model.stdout.on("data", function (data)
{
    output += data.toString();
    console.log(data.toString());
});

model.stderr.on("data", function (data)
{
    output += data.toString();
    console.log(data.toString());
});

model.on("close", function (exitCode)
{
   let result = JSON.parse(output.trim()); //exception is here
}

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

  1. Обрезан вывод, например. вывод.обрезать()
  2. Удален код невидимых управляющих символов, взятый из здесь
  3. Удален код других завершающих или ведущих символов, взятый из здесь
  4. Пробовал с подстрокой не учитывать первый символ в позиции 0, затем ошибка меняется, например. недопустимый токен v в позиции 0

помогите пожалуйста, это очень расстраивает


person Zain Ul Abidin    schedule 30.06.2021    source источник


Ответы (1)


По сути, мне не удалось успешно удалить невидимые управляющие символы, которые вызывали ошибку, поэтому следующий подход был взят из здесь, этот принятый ответ показывает не удаление, а другой подход, который заключается в извлечении фактического json из строки мусора, а затем анализе JSON, чтобы он стал

let output = '';
model = spawn("python3", ["./scanners/python/scan.py", code]);

model.stdout.on("data", function (data)
{
    output += data.toString();
    console.log(data.toString());
});

model.stderr.on("data", function (data)
{
    output += data.toString();
    console.log(data.toString());
});

model.on("close", function (exitCode)
{
   output = output.trim().match(/[{].*.[}]/); //extract actual content from garbage e.g. JSON between [] or {}
   let result = JSON.parse(output.trim());
}
person Zain Ul Abidin    schedule 01.07.2021