J'ai le code suivant dans l'un de mes scripts:
#
# url is defined above.
#
jsonurl = urlopen(url)
#
# While trying to debug, I put this in:
#
print jsonurl
#
# Was hoping text would contain the actual json crap from the URL, but seems not...
#
text = json.loads(jsonurl)
print text
Ce que je veux faire, c'est obtenir le {{.....etc.....}}
que je vois sur l'URL lorsque je le charge dans Firefox dans mon script afin que je puisse en analyser une valeur. J'ai googlé une tonne, mais je n'ai pas trouvé de bonne réponse sur la façon d'obtenir le contenu de {{...}}
à partir d'une URL se terminant par .json
dans un objet situé dans un Python. scénario.
Récupérez les données de l'URL puis appelez json.loads
par exemple.
exemple Python2:
import urllib, json
url = "http://maps.googleapis.com/maps/api/geocode/json?address=google"
response = urllib.urlopen(url)
data = json.loads(response.read())
print data
exemple Python:
import urllib.request, json
with urllib.request.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=google") as url:
data = json.loads(url.read().decode())
print(data)
La sortie donnerait quelque chose comme ceci:
{
"results" : [
{
"address_components" : [
{
"long_name" : "Charleston and Huff",
"short_name" : "Charleston and Huff",
"types" : [ "establishment", "point_of_interest" ]
},
{
"long_name" : "Mountain View",
"short_name" : "Mountain View",
"types" : [ "locality", "political" ]
},
{
...
Je suppose que vous voulez réellement obtenir des données à partir de l'URL:
jsonurl = urlopen(url)
text = json.loads(jsonurl.read()) # <-- read from it
Ou, consultez décodeur JSON dans la bibliothèque demandes .
import requests
r = requests.get('someurl')
print r.json() # if response type was set to JSON, then you'll automatically have a JSON response here...
Cela donne un dictionnaire au format JSON à partir d'une page Web avec Python 2.X et Python 3.X:
#!/usr/bin/env python
try:
# For Python 3.0 and later
from urllib.request import urlopen
except ImportError:
# Fall back to Python 2's urllib2
from urllib2 import urlopen
import json
def get_jsonparsed_data(url):
"""
Receive the content of ``url``, parse it as JSON and return the object.
Parameters
----------
url : str
Returns
-------
dict
"""
response = urlopen(url)
data = response.read().decode("utf-8")
return json.loads(data)
url = ("http://maps.googleapis.com/maps/api/geocode/json?"
"address=googleplex&sensor=false")
print(get_jsonparsed_data(url))
Voir aussi: Exemple de lecture et d'écriture pour JSON
J'ai trouvé que c'était le moyen le plus simple et le plus efficace d'obtenir du JSON à partir d'une page Web lorsque vous utilisiez Python 3:
import json,urllib.request
data = urllib.request.urlopen("https://api.github.com/users?since=100").read()
output = json.loads(data)
print (output)
Tout ce que l'appel à urlopen()
fait (selon docs ) est de retourner un objet de type fichier. Une fois que vous avez cela, vous devez appeler sa méthode read()
pour réellement extraire les données JSON sur le réseau.
Quelque chose comme:
jsonurl = urlopen(url)
text = json.loads(jsonurl.read())
print text
Il n'est pas nécessaire d'utiliser une bibliothèque supplémentaire pour analyser le json ...
json.loads()
renvoie un dictionnaire .
Donc, dans votre cas, faites simplement text["someValueKey"]
Dans Python 2, json.load () fonctionnera à la place de json.loads ()
import json
import urllib
url = 'https://api.github.com/users?since=100'
output = json.load(urllib.urlopen(url))
print(output)
Malheureusement, cela ne fonctionne pas dans Python 3. json.load est juste un wrapper autour de json.loads qui appelle read () pour un objet de type fichier. json.loads nécessite un objet chaîne et la sortie de urllib.urlopen (url) .read () est un objet octet. Il faut donc obtenir le codage du fichier pour que cela fonctionne dans Python 3.
Dans cet exemple, nous interrogeons les en-têtes pour le codage et retombons en utf-8 si nous n'en obtenons pas. L'objet d'en-tête est différent entre Python 2 et 3, il doit donc être effectué de différentes manières. Utiliser requêtes éviterait tout cela, mais vous devez parfois vous en tenir à la bibliothèque standard.
import json
from six.moves.urllib.request import urlopen
DEFAULT_ENCODING = 'utf-8'
url = 'https://api.github.com/users?since=100'
urlResponse = urlopen(url)
if hasattr(urlResponse.headers, 'get_content_charset'):
encoding = urlResponse.headers.get_content_charset(DEFAULT_ENCODING)
else:
encoding = urlResponse.headers.getparam('charset') or DEFAULT_ENCODING
output = json.loads(urlResponse.read().decode(encoding))
print(output)
vous pouvez utiliser json.dumps
:
import json
# Hier comes you received data
data = json.dumps(response)
print(data)
pour charger json et l'écrire dans un fichier, le code suivant est utile:
data = json.loads(json.dumps(Response, sort_keys=False, indent=4))
with open('data.json', 'w') as outfile:
json.dump(data, outfile, sort_keys=False, indent=4)