我正在使用 Tweepy python 库访问 Twitter API 以检索加密货币推文。我的应用程序使用 Django 后端和 ReactJs 前端。虽然我的网络应用程序将显示检索到的推文本身,但我还打算提供一个可点击的链接,以重新路由到 Twitter 上的原始推文。
我的 Django Rest Framework API 在返回 JSON 时正在完整检索正确的推文 ID 号。但是,当我从 Rest Framework API 检索到前端时,推文 ID 号的最后几位数字更改为“0”。我想知道这是否是 Twitter 使用的默认保护措施?
Django Rest API:
…
"bitcoin_tweet_user": "TheStarPhoenix",
"bitcoin_tweet": "Teslas can now be bought for bitcoin, Elon Musk says […]",
"bitcoin_tweet_link": 1375092596339585038,
…
网站前端:
App.js:
<div className="center-column-tweet">
<div className="item-row-tweets">
<div className="left">
<span>
<b>@{tasks.bitcoin_tweet_user}</b><br/><br/>
"{tasks.bitcoin_tweet}"<br/>
<b>Link:</b> https://twitter.com/twitter/statuses/{tasks.bitcoin_tweet_link}
</span>
</div>
</div>
</div>
最佳答案
您已成为浮点舍入的受害者。
JSON 中的数字值大致表示为十进制数字序列,可选地后跟小数点,然后更多数字0,原则上,数字序列可以是任意长。然而,这并不意味着每个 JSON 实现实际上都支持任意大的数字并准确地保留它们的值:Python 的 json
模块确实如此(至少对于整数),因为该语言支持任意大的整数:一个内置功能,但大多数其他实现没有。在实践中,JSON 数字通常被解析为 IEEE 754 double 浮点值;当遇到无法用该数字格式精确表示的值时,该数字通常会四舍五入到最接近的可表示值。这是 JavaScript 中发生的情况:数字 1375092596339585038 太大,无法用 JavaScript 数字类型精确表示,因此,当在 JavaScript 端解析它时,它会四舍五入到最接近的可表示值,然后打印为 1375092596339585000 .
(the original JSON specification 没有定义每个实现都必须支持的任何数字范围,也没有定义当无法准确解析值时应该发生什么,是 the many flaws in JSON 之一。)
您应该更改 API,以便将推文 ID 作为字符串而不是数字返回。鉴于推文 ID 无论如何都不是一个数量(例如,没有理由对其执行算术),因此您不会因为这样做而损失太多。
0 为了简单起见,我没有提及指数表示法。
关于javascript - 为什么在 JavaScript 中收到我的个人推文 ID 号时,最后几位数字变为 "0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66801873/