Guedda
@Guedda
Начинающий front-end разработчик

Как выполнить JSON.parse если на входе невалидная строка?

Здравствуйте.
Бьюсь с проблемой уже не первый день. В общем, приходит мне строка такого вида:
const str = "{'id':'147','name':'example1','address':'sample street 1'}";

Так вот мне ее надо превратить в объект.
Делаю так:
const tempStr = str.replace(/'/ig, '"');
const obj = JSON.parse(tempStr);

И всё работает. НО:
Если в строке приходит апостроф, например:
const str = "{'id':'147','name':'example's name1','address':'sample street 1'}";
const str2 = "{'id':'147','name':'example1','address':'sample's street 1'}";

Код перестает работать и выдает ошибку:
Uncaught SyntaxError: Expected ',' or '}' after property value in JSON

Как победить это?
К эндпоинту, который шлет мне эти строки у меня доступа нет.

Заранее благодарен за ответы
  • Вопрос задан
  • 821 просмотр
Решения вопроса 1
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
const str2 = JSON.stringify("{'id':'147','name':'example1','address':'sample's street 1'}");
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Приходит всегда одинаковый набор полей в одинаковом порядке? Если да, то можно разобрать регуляркой.
const str = "{'id':'147','name':'example's name1','address':'sample street 1'}";
const [_, id, name, address] = str.match(/{'id':'(.*?)','name':'(.*?)','address':'(.*?)'}/);
console.log(id); // 147
console.log(name); // example's name1
console.log(address); // sample street 1

Или так:
const re = /{'id':'(?<id>.*?)','name':'(?<name>.*?)','address':'(?<address>.*?)'}/;
const result = re.exec("{'id':'147','name':'example's name1','address':'sample street 1'}");
console.log(result.groups);
// Object { id: "147", name: "example's name1", address: "sample street 1" }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы