Como solicito e processo JSON com python?


91

Estou tentando enviar uma solicitação GET para uma URL que sei que retorna dados na forma de JSON usando python.

Gostaria de saber como enviar esta solicitação http://someurl/path/to/jsone como analisá-la - de preferência para um dicionário python.


2
posso pedir-lhe que troque a sua resposta aceite pela de pedidos?
webjunkie

Claro, é assim que eu faria hoje :)
sa125

Respostas:


130

Para qualquer coisa com solicitações de URLs, você pode verificar as solicitações . Para JSON em particular:

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

1
executá-lo com $ python GetJson.py não dá nenhuma resposta, mas a mesma coisa quando executado um por um no python CLI funciona bem. qualquer erro que cometi ao colocá-lo em um .py? (ma noob em python)
prayagupd

1
O problema que estou tendo com isso é que os serializadores DjangoRestFramework não estão aceitando isso como json válido, devido ao prefixo 'u' antes das chaves.
wobbily_col

2
@PrayagUpd antigo, e você provavelmente o descobriu, mas para qualquer outra pessoa que esteja se perguntando sobre isso: em um .pyarquivo precisa print(r.json())ver a resposta.
Antti Haapala

73

A biblioteca padrão do Python tem módulos jsone urllib2.

import json
import urllib2

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

21
Essa é uma pergunta antiga, mas eu queria me juntar ao webjunkie e apontar que em 2012 a biblioteca Requests: HTTP for Humans é uma resposta potencialmente preferível. docs.python-requests.org/en/latest
Peter Hanley

6
Definitivamente, você deve usar solicitações.
hughdbrown

1
Mas isso ainda é útil se você estiver preso em uma organização ignorante que torna difícil carregar bibliotecas que não fazem parte da biblioteca padrão
Thruston
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.