Не удается проанализировать JSON из-за замыкающих пробелов в строке JSON - PullRequest
1 голос
/ 25 сентября 2019

В настоящее время я работаю над веб-шабером и получаю JSON из <script type="application/ld+json> на определенной веб-странице.Я получаю его как строку, используя Cheerio, и передаю его парсеру JSON (пакет npm).Но я продолжаю получать синтаксическую ошибку, и это происходит, если у значения есть завершающий пробел.

Я попытался восстановить, обрезав каждое значение, но оно все еще не работает.

Этофрагмент моей строки JSON, где я получаю синтаксическую ошибку:

{"...821", "description":"                                                  \r\n
                                ","@type":"Organization",...}

Это ошибка, которую я получаю:

ErrorEXError [JSONError]: Unexpected token       in JSON at position 1432 while parsing near '...821","description":"                                                \r\n                                             ","...'

Как обрезать значение descriptionбез манипуляции со строками?

1 Ответ

1 голос
/ 25 сентября 2019

Правильно отформатированная строка JSON не должна содержать буквальных символов новой строки - она ​​может содержать только представления символов новой строки, например, \r\n.Замените все буквальные символы новой строки на \n, и вы сможете правильно их проанализировать:

const jsonStr = `{"description":"                                                  \r\n
                                ","@type":"Organization"}`;
const jsonStrWithoutNewlines = jsonStr.replace(/[\n\r]+/g, '\\n');
const obj = JSON.parse(jsonStrWithoutNewlines);
console.log(obj);

Буквенные символы табуляции также недопустимы - если это проблема, замените их на \t:

const jsonStr = `{"description":"                                                  \r\n
                                ","@type":"Organization			"}`;
const jsonStrWithoutNewlines = jsonStr
  .replace(/[\n\r]+/g, '\\n')
  .replace(/\t/g, '\\t');
const obj = JSON.parse(jsonStrWithoutNewlines);
console.log(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...