Axios API 响应 JSON 主体的字符串类型为“true/false”,而不是布尔值

J.B*_*J.B 5 javascript axios

我正在努力将 angularjs 应用程序转换为 React,并决定使用 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);
Run Code Online (Sandbox Code Playgroud)

响应主体是

{
   some: "true"
}
Run Code Online (Sandbox Code Playgroud)

但我例外

{
   some: true
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Tit*_*lum 1

[更新]正如菲尔指出的那样,Boolean('false')不起作用。我将代码更新为适用于“true”和“false”的代码,但如果您想涵盖所有可能性,则需要更复杂的函数。


如果 API 的响应完全如下所示:

{
  "some": "true"
}
Run Code Online (Sandbox Code Playgroud)

那么axios就没有做错什么。对于库来说,自动解析它们认为合适的值是危险的,只需看看Json.NET 如何处理它们认为看起来像 Datetime 的值即可值即可。

如果 API 返回的有效负载如下所示:

{
  "some" : true
}
Run Code Online (Sandbox Code Playgroud)

然后axios应该直接将其解析为布尔值。

我建议你做的就是始终将值解析为布尔值,即使它已经是一个:

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

let someValue = String(request.data.some) == "true";
Run Code Online (Sandbox Code Playgroud)

这适用于Boolean("true")以及Boolean(true)

  • 仅供参考,`Boolean("false")`返回`true`,所以这不是一个解决方案 (2认同)