首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python请求API会给出Raspberry Pi上不正确的输出。

使用python请求API会给出Raspberry Pi上不正确的输出。
EN

Stack Overflow用户
提问于 2020-03-24 08:28:37
回答 2查看 54关注 0票数 0

因此,我一直在创建一个python代码,它调用一个API接口来获取它的JSON代码。

在使用以下代码请求api之后:

代码语言:javascript
复制
url = requests.get("https://stats.foldingathome.org/api/donor/PointofHorizon")

然后,我会将给定的JSON信息打印到控制台中,以获得以下输出:

代码语言:javascript
复制
{"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代码,但是如果我要在Raspberry Pi上运行这个确切的python代码,我将得到JSON,但它将是完全随机的。请注意,窗口和Pi运行的代码完全相同,而窗口给了我我想要的输出--只是pi不是。有人能解释为什么我在Pi上得到随机输出而不是窗口吗?

下面是在窗口和Pi上运行3次的python代码的一些截图,这样您就可以看到我所说的随机的意思了。但基本上,它是从pi上的API获取信息,而不是按照API页面上正确的顺序显示JSON文件:

Windows:编辑:这个窗口的Python版本是Python 3.8.2

覆盆子皮:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-24 08:50:34

这是一种预期的行为:JSON标准声明:

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

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

由于顺序在Windows上没有变化,但在Raspberry Pi上却发生了变化,这是因为您运行了不同版本的Python。自从Python3.7之后,dict现在被排序,并保持插入的顺序。

如果希望得到一致的结果,请在两台机器上运行相同版本的python。如果顺序对您非常重要,您也可以考虑使用OrderedDict或排序(使用sorted(json_response))作为结果字典。

票数 0
EN

Stack Overflow用户

发布于 2020-03-24 08:50:53

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

如果您想保存这些信息,请考虑升级到python3.7+,字典顺序现在是确定性的(参见发布说明 )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60827336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档