Ich bin ziemlich neu mit JSON. Mein Code besteht darin, Daten von einer Website zu extrahieren, die einen API-Schlüssel benötigt. Die Information extrahiert haben. Ich versuche, die Informationen zu gelangen, die in Sohn durch dieses Format codiert ist (hier ist ein Beispiel):Zugriff auf Daten aus einer JSON-Datei
[{"number":31705,"name":"31705 - CHAMPEAUX (BAGNOLET)","address":"RUE DES CHAMPEAUX (PRES DE LA GARE ROUTIERE) - 93170 BAGNOLET","latitude":48.8645278209514,"longitude":2.416170724425901},{"number":10042,"name":"10042 - POISSONNIÈRE - ENGHIEN","address":"52 RUE D'ENGHIEN/ANGLE RUE DU FAUBOURG POISSONIERE - 75010 PARIS","latitude":48.87242006305313,"longitude":2.348395236282807}]
Wie greife ich auf die verschiedene Daten im JSON-Code? Dies ist der Code, den ich mit gekommen bin:
import requests
reponse=requests.get('https://api.jcdecaux.com/vls/v1/stations/{station_number}?contract={contract_name}&api_key HTTP/1.1')
Ich glaube, dass meine Anfrage eine Antwort formuliert hat, die in der „Antwort“ liegt „Ordner“, die von der Website zu meinem Computer gesendet wurde:
print(reponse.headers)
print(reponse(2,/'latitude')
Ich versuche in jedem Element des JSON-Codes auf die Information der Breite zuzugreifen - die 2 stellt das zweite Element der Liste und die Breite den Wert des Wertes dar, auf den ich innerhalb des Elements der JSON-Liste zugreifen möchte. Aber ich kann es nicht schaffen. Der Fehler, den ich bekomme, ist ein Syntaxfehler.
Wie behebe ich es? Ich möchte auf den gesamten Wert jedes Strings jedes Mitglieds des Objekts 'Antwort' zugreifen.
UPDATE n ° 1:
Mein neuer Code ist:
import json
import requests
reponse=requests.get('https://api.jcdecaux.com/vls/v1/stations/{31705}?contract={Paris}&apiKey={0617697a9795f803697de4b9abf9759d5406b3a0} HTTP/1.1')
data = json.loads(response.content)
print(data)
erhalte ich jedoch den Fehler:
Traceback (most recent call last):
File "/Users/someone/Desktop/TIPE 2016:17/Programme TIPE 2016:2017.py", line 27, in <module>
data = json.loads(response.content)
File "/Users/someone/miniconda3/lib/python3.5/json/__init__.py", line 312, in loads
s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'
UPDATE n ° 2:
meinen neuen Code ist:
Allerdings bekomme ich den Fehler:
Traceback (most recent call last):
File "/Users/someone/Desktop/TIPE 2016:17/Programme TIPE 2016:2017.py", line 30, in <module>
latitude = data[2]['latitude']
KeyError: 2
Bedeutet es, dass Antwort leer ist?
UPDATE n ° 3:
reponse.content
die Antwort ist folgende:
b'{ "error" : "Unauthorized" }'
Was ist das Problem?
UPDATE n ° 4:
mein neuer Code ist:
reponse=requests.get('https://api.jcdecaux.com/vls/v1/stations/{31705}?contract={Paris}&apiKey={0617697a9795f803697de4b9abf9759d5406b3a0} HTTP/1.1')
data = json.loads(response.content.decode('utf-8'))
print(reponse.headers)
print(reponse.content)
das Ergebnis:
{'Content-Length': '48', 'Content-Encoding': 'gzip', 'Server': 'Apache-Coyote/1.1', 'Date': 'Fri, 23 Sep 2016 19:39:25 GMT', 'Connection': 'close', 'Content-Type': 'application/json'}
b'{ "error" : "Unauthorized" }'
so die Antwort auf meine Anfrage nicht leer ist, aber ich habe nicht die Berechtigung, darauf zuzugreifen. Wie kann ich das lösen?
FINAL UPDATE:
Der neue und Arbeitscode lautet:
import json
import requests
r = requests.get('https://api.jcdecaux.com/vls/v1/stations/31705?contract=Paris&apiKey=0617697a9795f803697de4b9abf9759d5406b3a0')
response_json = r.json()
print (response_json['name'])
und das Ergebnis ist:
31705 - CHAMPEAUX (BAGNOLET)
Was versuchen Sie mit 'print (reponse (2,/'Breite')', weil sie einen Schließbügel 'fehlt) zu erreichen,' und '/ 'latitude'' Argument ist seltsam. –
Ich versuche in jedem Element des JSON-Codes auf die Information der Breite zuzugreifen - die 2 repräsentiert das zweite Element der Liste und die Breite den Namen des Wertes, auf den ich innerhalb des Elements der JSON-Liste zugreifen möchte. Aber ich kann es nicht schaffen. –
könnten Sie überprüfen, was der Wert von "response.content" ist? –