Декодировать http-ответ в Angular — проблема с JSON.parse

После некоторого возни я дошел до того, что могу получить следующее тело в ответе об ошибке 404 от моего бэкэнда. Я изо всех сил пытаюсь разобрать содержимое в angular, чтобы я мог его использовать. Я знаю, что это простые вещи, поэтому извините, что задаю такой простой вопрос. _body выглядит так.

 _body: "{\"httpStatus\":404,\"errorType\":\"NotFound\",\"message\":\"Device does not exist!\"}"

Это нормально:

console.info("Err = ", err);
Err =  Response {_body: " 
{\"httpStatus\":404,\"errorType\":\"NotFound\",\"message\":\"Device does not exist!\"}", status: 404, ok: false, statusText: "OK", headers: Headers, …}

и:

console.info("Err Body : ", err._body);
Err Body :  
{\"httpStatus\":404,\"errorType\":\"NotFound\",\"message\":\"Device does not exist!\"}

Но это не работает:

let errorObject = eval(errorString);
Uncaught (in promise): SyntaxError: Invalid or unexpected token

...

var errBody = JSON.parse(errorString);
console.info("JS err body", errBody);
Error: Uncaught (in promise): SyntaxError: Unexpected token \ in JSON at position 1

Но я не могу понять, как получить отдельные поля. Я отдаю себе отчет в том, что вышеуказанные усилия наивны и ошибочны. Я уверен, что любой, у кого есть навыки JS или angular, может решить это за минуту.

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

Редактировать:

Спасибо за ответы. JSON.parse у меня не работает!?

SyntaxError: Unexpected token \ in JSON at position 1

Я более внимательно посмотрел на то, с чем вы добились успеха, и я согласен, что это отлично работает в консоли. Но у меня не работает в Angular. Что сработало:

let errBody = JSON.parse("\"" + err._body + "\"");

Хотя это кажется смешным. Тем более, что потом результат не совсем правильный:

err body {"httpStatus":404,"errorType":"NotFound","message":"Device does not exist!"}

Если я затем попытаюсь получить errBody.message, это не определено!... Это полный абсурд. Что я делаю неправильно? Как вы, ребята, зарабатываете этим на жизнь? Это убивает меня!

Что такое errorString? Откуда это? JSON.parse('{\"httpStatus\":404,\"errorType\":\"NotFound\",\‌​"message\":\"Device does not exist!\"}'); сработало для меня.

R. Richards 21.02.2019 23:19
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
938
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я предполагаю, что errorString это err._body? В любом случае, синтаксический анализ этой строки в JSON должен быть таким же простым, как:

let error = JSON.parse(err._body);
Ответ принят как подходящий

Я вернулся к этому недавно. И, наконец, удалось разобраться. Мне нужно было удалить некоторые нежелательные обратные косые черты в теле, прежде чем пытаться JSON Parse.

const errorStringReplaced = err._body.replace(/\/g, '');
const errBody = JSON.parse(errorStringReplaced);
this.outcomeMessage = errBody.message;

Сделав это, я смог правильно схватить внутренности. Я бы все же предпочел правильно отправить объект, но пока это нужно сделать.

Другие вопросы по теме