Jak żądać i przetwarzać JSON w Pythonie?


91

Próbuję wysłać żądanie GET na adres URL, o którym wiem, że zwraca dane w postaci JSON za pomocą Pythona.

Chciałbym wiedzieć, jak wysłać to żądanie do http://someurl/path/to/jsoni jak je przeanalizować - najlepiej do dyktu w Pythonie.


2
czy mogę uprzejmie prosić o zmianę zaakceptowanej odpowiedzi na tę, która zawiera prośby?
webjunkie,

Jasne, tak bym to dzisiaj zrobił :)
sa125

Odpowiedzi:


130

W przypadku wszystkich żądań do adresów URL możesz chcieć sprawdzić żądania . W szczególności w przypadku formatu JSON:

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

1
uruchomienie go z $ python GetJson.py nie daje żadnej odpowiedzi, ale to samo, gdy jest uruchamiane jeden po drugim w Pythonie CLI działa dobrze. jakikolwiek błąd, który popełniłem podczas umieszczania go w .py? (ma noob w pythonie)
prayagupd

1
Problem, który mam z tym, polega na tym, że serializatory DjangoRestFramework nie akceptują tego jako prawidłowego json, z powodu prefiksu „u” przed kluczami.
wobbily_col

2
@PrayagUpd stary i prawdopodobnie się o tym dowiedziałeś, ale dla każdego, kto się nad tym zastanawiał: w .pypliku trzeba print(r.json())zobaczyć odpowiedź.
Antti Haapala

73

Standardowa biblioteka Pythona ma jsoni urllib2moduły.

import json
import urllib2

data = json.load(urllib2.urlopen('http://someurl/path/to/json'))

21
To stare pytanie, ale chciałem dołączyć do webjunkie i wskazać, że w 2012 roku biblioteka Requests: HTTP for Humans jest potencjalnie preferowaną odpowiedzią. docs.python-requests.org/en/latest
Peter Hanley,

6
Zdecydowanie powinieneś używać próśb.
hughdbrown,

1
Ale jest to nadal przydatne, jeśli utkniesz w ciemnej organizacji, która utrudnia ładowanie bibliotek, które nie są częścią biblioteki standardowej
Thruston,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.