【问题标题】:Javascript long integer from server is not accurate [duplicate]来自服务器的Javascript长整数不准确[重复]
【发布时间】:2019-03-31 22:59:56
【问题描述】:

我有一个API,我发出一个get 请求来获取数据。当我尝试保存 Id 时,我看到 Javascript 在它的最后一位数字周围,这让我的程序崩溃了!

我看到了THIS QUESTION,但是如何将每个 Id 保存为string

我正在使用全局数组来存储所选项目的数据,所以无论如何要将JSON 的一个属性保存在string 中?

我将拥有(例如)3 个项目,并为每个 Id 发出另一个 get 请求:

axios.get(`http://api.nemov.org/api/v1/Market/Symbol/${this.props.ID}`)

Ids 之一是:9481703061634967,但 JS 将其转换为 9481703061634968,因此 get 请求被破坏!

有什么办法吗?

【问题讨论】:

  • 9481703061634967 > Number.MAX_SAFE_INTEGER get 请求没有被破坏——这个数字太大了——你为什么提到 JSON? API 返回 XML 而不是 JSON
  • how can I save each Id as string - 解析 XML 时,不要将 Id 从当前类型(字符串,因为 XML 中的所有内容都是字符串)更改为整数 - 这样您的代码就不会中断从 API 获取的数据
  • 您已经显示了零代码 .. .所以,我无法告诉您解析 XML 的代码的哪一部分破坏了 ID - 查找 parseInt、parseFloat 甚至是一元 + in你的代码
  • 如果你指的是 API 链接,如果你使用浏览器,它会返回 XML,但如果你使用 Axios 或类似的东西,你会得到 JSON
  • 您可以告诉 Axios 获取 XML,而不是 JSON (responseType)...

标签: javascript json reactjs react-native ecmascript-6


【解决方案1】:

this问题上查看我的解决方案:

将响应转换为字符串,然后用正则表达式替换 将Id字段转换为字符串类型:

const axios = require("axios");
axios.get(url, {transformResponse: [data => data]}).then((response) => {
    let parsed = JSON.parse(response.data.replace(/"Id":(\d+),/g, '"Id":"$1",'))
    console.log(parsed)
});

【讨论】:

    【解决方案2】:

    使用这个:

    let strId = this.props.ID.toString();
    axios.get(`http://api.nemov.org/api/v1/Market/Symbol/${strId}`)
    

    【讨论】:

    • 不工作! - 考虑到这是在我获取数据并保存响应时发生的,而不是在我传递道具时发生!
    猜你喜欢
    • 2013-08-19
    • 2019-03-20
    • 2014-02-20
    • 1970-01-01
    • 2019-07-06
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多