Ottieni JSON dall'URL in Python
Ogni volta che vogliamo ottenere dati da un server Web utilizzando un URL, tali dati dovrebbero avere un formato particolare. In generale, ogni volta che vogliamo recuperare dati dal server web, utilizziamo i formati JSON o XML.
Preferiamo JSON rispetto a XML perché è diventato molto popolare nell’industria del software. Esistono varie librerie in Python per elaborare JSON.
Durante questo tutorial, useremo i moduli json
e requests
, che sono disponibili in Python.
I dati JSON che recupereremo provengono dall’URL sottostante. Questo URL ci permette di recuperare tutti i dati relativi agli users
come nome, email, indirizzo, ecc. È gratuito.
https://jsonplaceholder.typicode.com/users
In termini di API riposanti, gli URL sono chiamati endpoint. Durante questo tutorial, useremo queste due parole in modo intercambiabile. Nell’URL sopra, /users
si riferisce a un endpoint.
Se apri l’URL di cui sopra nel browser, vedrai tutti i dati relativi agli users
in formato JSON. È mostrato di seguito.
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
]
Tieni presente che ti abbiamo mostrato solo i dati JSON relativi a un singolo utente nel blocco di codice sopra. Questo è solo a scopo illustrativo. Ma se visiti l’URL, vedrai i dati per tutti gli utenti.
Il JSON si riferisce a JavaScript Object Notation
. Viene utilizzato per inviare e ricevere dati tra un server e un client e viceversa. Qui, non confonderti con la parola JavaScript
; JSON è indipendente da qualsiasi linguaggio di programmazione. In JSON, utilizziamo due tipi di parentesi per formattare i dati; una è la parentesi quadra []
che rappresenta un array
o una lista
, e l’altra è le parentesi graffe {}
che rappresenta un object
.
I dati all’interno del JSON saranno sempre sotto forma di coppie di valore-chiave
tra virgolette ""
. Quindi, se vuoi accedere a qualsiasi valore, devi usare la chiave
associata a quel valore. Ad esempio, supponiamo di voler accedere al nome dell’utente dai dati JSON di cui sopra; useremo la chiave name
per ottenere il valore Leanne Graham
, che è il nome del primo utente. Inoltre, tieni presente che non sono consentiti commenti in JSON.
Ottieni e accedi ai dati JSON in Python
Per prima cosa, dobbiamo importare i moduli requests
e json
per ottenere e accedere ai dati.
import requests
import json
Recupera e converti i dati dall’URL a una stringa
Il primo passo che dobbiamo eseguire qui è recuperare i dati JSON utilizzando la libreria requests
.
url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
print(type(text))
Produzione:
<class 'str'>
La libreria requests
ha un metodo chiamato get()
che accetta un URL come parametro e quindi invia una richiesta GET
all’URL specificato. La risposta che otteniamo dal server è memorizzata nella variabile chiamata url
.
Questa risposta memorizzata nella variabile url
deve essere convertita in una stringa con l’aiuto del metodo .text
come url.text
. Quindi, memorizziamo il risultato nella variabile text
. Se stampi il tipo della variabile text
, sarà di tipo <class 'str'>
.
Analizza i dati JSON
L’analisi è un processo di conversione dei dati della stringa in formato JSON. Per questo, useremo il modulo json
.
data = json.loads(text)
print(type(data))
Produzione:
<class 'list'>
Il modulo json
viene fornito con un metodo chiamato loads()
, la s
in loads()
sta per stringa. Poiché vogliamo convertire i dati della stringa in JSON, utilizzeremo questo metodo. All’interno di questo metodo, dobbiamo passare la variabile text
che contiene la stringa data json.loads(text)
e memorizzarla all’interno della variabile data
.
Ora i data
avranno l’intera risposta JSON. Se stampi il tipo della variabile data
, allora sarà di tipo <class 'list'>
perché in questo caso la risposta JSON inizia con le parentesi quadre []
e in Python le liste iniziano con il quadrato parentesi.
Accedi ai dati JSON
Ora che abbiamo analizzato i dati JSON, siamo pronti per accedere ai singoli valori che vogliamo utilizzando la variabile data
. Per accedere ai dettagli del primo utente, come Nome e Indirizzo, possiamo fare quanto segue.
import json
import requests
url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
data = json.loads(text)
user = data[0]
print(user["name"])
address = user["address"]
print(address)
Produzione:
Leanne Graham
{'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}
Per accedere al primo utente dall’lista degli utenti, dobbiamo utilizzare l’indice 0
dai dati JSON, che è memorizzato all’interno di una variabile chiamata data
, e quindi memorizzare tutti i dettagli di quel primo all’interno di user
. Ora questo users
è un oggetto che contiene tutti i dettagli relativi a quell’utente. Per accedere al nome, dobbiamo solo passare la chiave name
all’interno della variabile user
come user['name']
e poi stamparla. Stamperà il nome dell’utente all’interno della console.
E per accedere all’indirizzo dobbiamo passare la chiave address
all’interno della variabile utente cioè user['address']
, quindi memorizzarla all’interno di una variabile chiamata address
e stamparla. Questo ti darà un oggetto che conterrà tutti i dettagli specifici relativi al campo dell’indirizzo come il numero dell’appartamento, il nome della via, il codice postale e così via. Diciamo che da questi dettagli vuoi solo il zipcode
dell’utente; quindi devi passare la chiave del codice zipcode
all’interno dell’oggetto address
.
Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.
LinkedIn