Запрос API с python дает мне неправильные результаты на Raspberry Pi - PullRequest
0 голосов
/ 24 марта 2020

Итак, я создаю 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}

Это прекрасно работает при выполнении кода python на машине windows, но если Я должен был запустить этот точный код python на Raspberry Pi, я бы получил JSON, но он был бы полностью рандомизирован. Обратите внимание, что и windows, и Pi используют один и тот же код, а windows дает мне вывод, который я хочу, просто пи нет. Может кто-нибудь объяснить, почему я получаю рандомизированные выходные данные на Pi по сравнению с windows?

Вот некоторые скриншоты кода python, выполняющегося 3 раза как на windows, так и на Pi, так что вы можете увидеть, что я под случайным Но в основном он берет информацию из API на пи и не отображает файл JSON в правильном порядке, в котором он находится на странице API:

Windows: edit: Python версия для этого windows is Python 3.8.2 Windows Python code output

Raspberry Pi:

Raspberry Pi output

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Я полагаю, вы наблюдаете, что в python3.5 нет никаких гарантий порядка ключей в словаре. Строка JSON, возвращаемая вашим API, вероятно, та же самая (в конце концов, она приходит с того же сервера). Однако когда python преобразует его в словарь, он не учитывает порядок ключей.

Если вы хотите сохранить эту информацию, рассмотрите возможность обновления до python3 .7 +, где порядок словаря теперь определен c (см. примечания к выпуску )

0 голосов
/ 24 марта 2020

Это ожидаемое поведение: JSON стандарт сообщает:

Объект представляет собой неупорядоченный набор пар имя / значение.

Следовательно, нет никакого «правильного» или «неправильного» порядка результирующего JSON.

Как и почему порядок не изменяется на Windows, но он меняется на Raspberry Pi, потому что вы запускаете другую версию Python. Начиная с Python 3.7, dict теперь упорядочены и сохраняют порядок вставки.

Если вы хотите получить согласованный результат, запустите одну и ту же версию python на обеих машинах. Вы также можете рассмотреть возможность использования OrderedDict или отсортировать (используя sorted(json_response)) полученный словарь, если порядок действительно имеет для вас значение.

...