为了账号安全,请及时绑定邮箱和手机立即绑定

使用 python 向 API 发出请求会在树莓派上给出不正确的输出

使用 python 向 API 发出请求会在树莓派上给出不正确的输出

慕容708150 2022-09-13 10:14:59
所以我一直在创建一个python代码,该代码调用API以获取其JSON代码。使用此代码请求 API 后:url = requests.get("https://stats.foldingathome.org/api/donor/PointofHorizon")然后,我将给定的 JSON 信息打印到控制台中以获取此输出:{"wus": 131, "rank": 99964, "total_users": 2236318, "active_50": 2, "path": "donor/PointofHorizon", "wus_cert": "https://apps.foldingathome.org/awards?user=35025837&type=wus", "id": 35025837, "credit_cert": "https://apps.foldingathome.org/awards?user=35025837&type=score", "last": "2020-03-22 15:18:54", "name": "PointofHorizon", "teams": [{"wus": 97, "last": "2020-03-22 15:18:54", "uid": 35025837, "active_50": 2, "active_7": 2, "credit": 310435, "team": 225605, "name": "PC Master Race - PCMR"}, {"wus": 34, "last": "2019-08-17 13:00:11", "uid": 35025837, "active_50": 0, "active_7": 0, "credit": 431809, "team": 223518, "name": "LinusTechTips_Team"}], "active_7": 2, "credit": 742244}这可以完美地在Windows机器上运行python代码,但是如果我在树莓派上运行这个确切的python代码,我会得到JSON,但它会完全随机化。请注意,窗口和 Pi 都运行完全相同的代码,而窗口给我的输出是我想要的,只是 pi 不是。任何人都可以解释为什么与窗口相比,我在Pi上获得随机输出?以下是python代码在Windows和Pi上运行3次的一些屏幕截图,因此您可以理解我所说的随机含义。但基本上,它从 pi 上的 API 获取信息,而不是以 API 页面上的正确顺序显示 JSON 文件:视窗: 编辑: 蟒蛇版本为这个视窗是蟒蛇 3.8.2
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

这是预期的行为:JSON 标准指出:

对象是一组无序的名称/值对。

因此,生成的 JSON 没有“正确”或“不正确”的顺序。

至于顺序在Windows上不会改变,但在树莓派上会改变,那是因为你运行不同版本的Python。从Python 3.7开始,字典现在是有序的,并保留了插入的顺序。

如果需要一致的结果,请在两台计算机上运行相同版本的 python。您也可以考虑使用 OrderDict,或者对生成的字典进行排序(使用 ),如果顺序对您来说确实很重要。sorted(json_response)


查看完整回答
反对 回复 2022-09-13
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我相信你正在观察到,在 中,没有关于字典中键顺序的保证。您的 API 返回的 JSON 字符串可能是相同的(毕竟,它来自同一服务器)。但是,当将其转换为字典时,它不遵循键的顺序。python3.5python

如果要保留此信息,请考虑升级到 python3.7+,其中字典顺序现在是确定性的(请参阅发行说明 )


查看完整回答
反对 回复 2022-09-13
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号