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, 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, 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.

Articolo correlato - Python JSON

  • Iterate attraverso l'oggetto Json in Python
  • Salva il dizionario in JSON in Python
  • Articolo correlato - Python API

  • Converti file CSV in file JSON in Python