Ответ Axios API В теле JSON указано "true / false", поскольку строковый тип не является логическим - PullRequest
2 голосов
/ 27 июня 2019

Я работаю над преобразованием приложения angularjs в реакцию и решил использовать axios для запроса API. Все работает нормально, за исключением некоторого тела ответа с типом JSON, но логические значения являются строковым типом, а не логическим. Он отлично работает с angularJs $ http, но некоторые из конечных точек возвращаются таким образом.

Модули AngularJs + Typescript 2.9.1 + axios 0.19.0

let request = Axios({
    ...requestConfig,
    url: resource, method: 'get', responseType: 'json'
}).then(response => response);

и тело ответа

{
   some: "true"
}

но я исключаю

{
   some: true
}

Есть идеи?

1 Ответ

1 голос
/ 27 июня 2019

[ОБНОВЛЕНИЕ], как указано Фил , Boolean('false') не работает.Я обновил код до того, что будет работать для «истина» и «ложь», но более сложная функция необходима, если вы хотите охватить все возможности.


Если ответ API точно выглядитвот так:

{
  "some": "true"
}

Тогда axios не делает ничего плохого.Для библиотеки опасно автоматически анализировать значения по своему усмотрению, просто посмотрите на , как Json.NET обрабатывает значения, которые они считают похожими на Datetime .

ЕслиПолезная нагрузка, возвращаемая API, выглядит в точности так:

{
  "some" : true
}

Тогда axios должен непосредственно проанализировать его как логическое значение.

То, что я предлагаю вам сделать, это всегда парсит значение как логическое значение, даже если оно уже равно:

let request = await Axios({...requestConfig,
      url: resource, method: 'get', responseType: 'json'
    });

let someValue = String(request.data.some) == "true";

Это будет работать как для Boolean("true"), так и для Boolean(true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...