猿问

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

所以我一直在创建一个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

慕容708150
浏览 132回答 2
2回答

呼如林

这是预期的行为:JSON 标准指出:对象是一组无序的名称/值对。因此,生成的 JSON 没有“正确”或“不正确”的顺序。至于顺序在Windows上不会改变,但在树莓派上会改变,那是因为你运行不同版本的Python。从Python 3.7开始,字典现在是有序的,并保留了插入的顺序。如果需要一致的结果,请在两台计算机上运行相同版本的 python。您也可以考虑使用 OrderDict,或者对生成的字典进行排序(使用 ),如果顺序对您来说确实很重要。sorted(json_response)

慕勒3428872

我相信你正在观察到,在 中,没有关于字典中键顺序的保证。您的 API 返回的 JSON 字符串可能是相同的(毕竟,它来自同一服务器)。但是,当将其转换为字典时,它不遵循键的顺序。python3.5python如果要保留此信息,请考虑升级到 python3.7+,其中字典顺序现在是确定性的(请参阅发行说明 )
随时随地看视频慕课网APP

相关分类

Python
我要回答