Come analizzare JSON in Python - Semplici passaggi

Commenti: 0

JSON è l'acronimo di JavaScript Object Notation. Non solo è leggero, ma anche facile da leggere e scrivere per gli esseri umani. Allo stesso modo, le macchine lo trovano semplice da analizzare e generare. Il parsing è fondamentale quando si ha a che fare con contenuti provenienti da API, file di configurazione o altre fonti di informazioni memorizzate per qualsiasi sviluppatore Python. Questo articolo illustra le basi dell'analisi di JSON utilizzando il modulo Python, compreso l'uso di json.dump python per salvare i contenuti.

Comprendere JSON e la sua struttura

JSON struttura i dettagli in coppie chiave-valore. Ecco un esempio di base di un oggetto:


{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

Questo esempio di parsing json in Python contiene elementi comuni: una stringa, un numero, un booleano e un array. Familiarizzare con questa struttura rende molto più facile lavorare in Python.

Interagire con JSON in Python

Implementando Python, è possibile analizzare facilmente le stringhe json utilizzando il modulo integrato in Python. Questo modulo include metodi come json.loads() per leggere da una stringa e json.load() per leggere da un file. Al contrario, json.dumps() e json.dump Python sono utilizzati per scrivere informazioni rispettivamente su una stringa e su un file.

Lettura di dati JSON

Vediamo come leggere i dati JSON, di cui parleremo in seguito.

Lettura di JSON da una stringa

Se si vuole leggere json in python, usare json.loads() per analizzare una stringa e convertirla in un oggetto python:


import json

json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)

print(data)

Uscita:

1.png

Estrazione di JSON da un file

Per estrarre informazioni da un file, utilizzare questo metodo: json.load() e aprire un file json in python:


import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Uscita:

2.png

Scrittura di dati JSON

Prima di scrivere, spesso è necessario leggere o caricare informazioni esistenti: è qui che il metodo python load json file diventa utile. Una volta che le informazioni sono state caricate correttamente, è possibile manipolarle e scriverle in vari formati.

Scrivere JSON in una stringa

Per scrivere le informazioni in una stringa, usare il metodo json.dumps di Python:


import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

json_string = json.dumps(data)
print(json_string)

Uscita:

3.png

Scrivere JSON in un file

Per scrivere i dettagli di questo file, utilizzare il metodo json.dump di Python:


import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

with open('data.json', 'w') as file:
    json.dump(data, file)

Gestione di JSON annidato avanzato

Gli oggetti annidati sono comuni quando si lavora con strutture informative più complesse, che possono gestire facilmente.


import json

nested_json_string = '''
{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"],
    "address": {
        "street": "123 Main St",
        "city": "Wonderland"
    }
}
'''

data = json.loads(nested_json_string)
print(data['address']['city'])

Uscita:

4.png

Codificatore JSON personalizzato

Il linguaggio non può trasformare automaticamente tutti gli oggetti personalizzati in JSON. In questi casi, è necessario creare un codificatore personalizzato.


import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

class StudentEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Student):
            return obj.__dict__
        return super().default(obj)

student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)

Uscita:

5.png

Decodificatore JSON personalizzato

Per deserializzare gli oggetti personalizzati, è necessario implementare un decodificatore personalizzato che sappia come gestirli.


import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

def student_decoder(dct):
    return Student(dct['name'], dct['age'], dct['is_student'])

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)

Uscita:

6.png

Gestione di problemi comuni

Lavorare con dati dettagliati può portare a diversi errori comuni, in particolare quando si analizza, si genera o si accede a contenuti strutturati. L'uso di un parser json python affidabile può aiutare a identificare e risolvere questi problemi in modo più efficiente. Ecco alcuni dei più comuni:

Formato JSON non valido

Un errore comune quando si analizza un file json è quello di incontrare un formato non valido. Richiede l'uso di doppi apici intorno alle chiavi e ai valori delle stringhe e il corretto annidamento di parentesi e graffe.


import json

invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
    data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
    print(f"Invalid JSON format: {e}")

Uscita:

7.png

Gestione delle chiavi mancanti

A volte, il contenuto non include tutte le chiavi previste. L'uso del metodo get() consente di gestire in modo sicuro le chiavi mancanti, restituendo un valore predefinito invece di generare un errore.


import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)

Debug dei problemi di parsing JSON

Usare il modulo pdb per impostare i punti di interruzione ed eseguire il debug del codice di parsing.


import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

Esempio pratico di gestione di JSON nello scraping web

Il web scraping di solito comporta il recupero di contenuti da servizi che restituiscono le informazioni ottenute. Di seguito è riportato un esempio che utilizza la libreria delle richieste insieme all'endpoint https://httpbin.org/anything.

Prima di iniziare, verificare che sia stato installato il pacchetto requests:


pip install requests

Quando si lavora con contenuti strutturati, si può usare la libreria requests per semplificare le cose. È sufficiente inviare una richiesta GET e l'URL tramite requests.get(url). Poi, si può analizzare la risposta con response.json(). Da qui, è semplice accedere a informazioni specifiche come le intestazioni, l'interprete, l'origine o l'URL della richiesta e stamparle secondo le necessità.

Il codice contiene una forte gestione degli errori; cattura json.JSONDecodeError quando si verifica un errore di decodifica e KeyError quando una chiave specifica è assente, rendendo di conseguenza il programma protetto da crash "senza dati". Questa robustezza del codice gli consente di gestire perfettamente le attività di web scraping reali.


import requests
import json

url = 'https://httpbin.org/anything'

response = requests.get(url)

try:
    data = response.json()

    # Estrazione di dati specifici dalla risposta JSON
    headers = data['headers']
    user_agent = headers.get('User-Agent', 'N/A')
    origin = data.get('origin', 'N/A')
    url = data.get('url', 'N/A')

    print(f"User Agent: {user_agent}")
    print(f"Origin: {origin}")
    print(f"URL: {url}")

except json.JSONDecodeError:
    print("Error decoding JSON response")

except KeyError as e:
    print(f"Key error: {e} not found in the JSON response")

8.png

Ogni sviluppatore deve sapere come analizzare un file json in python. Con il modulo e il modo migliore per farlo evidenziato da questo manuale, sarete in grado di leggere, scrivere e fare il debug abbastanza velocemente. Ciò significa testare regolarmente il codice e utilizzare gli strumenti giusti e le funzionalità più recenti per ottenere prestazioni migliori. Questa guida si concentra sul parsing dei dati json in python per aiutarvi a padroneggiare questi compiti in modo efficiente.

Quando si esegue il web scraping, il parsing diventa essenziale, poiché i contenuti delle API web sono spesso in questo formato. Essere abili nell'elaborazione e nella manipolazione consente di estrarre informazioni preziose da una varietà di fonti in modo efficiente.

Conclusione

Il parsing è un'abilità fondamentale per qualsiasi sviluppatore che lavori con API web, file di configurazione o fonti esterne. La gestione delle informazioni, sia che si tratti di leggere da una stringa, da un file, di scrivere un output strutturato o di gestire oggetti annidati e personalizzati, è semplificata dal modulo integrato in Python. Gli sviluppatori possono sbloccare i metodi json.load(), json.loads(), json.dump(), json.dumps() di Python e imparare a gestire i problemi più comuni, a implementare codificatori o decodificatori personalizzati e a creare applicazioni su misura per l'interazione con le informazioni che siano robuste e affidabili. Dato che questo formato è uno standard web per lo scambio di informazioni, queste competenze sono preziose per lo scraping, la manipolazione dei contenuti e l'integrazione di più servizi tramite API. L'uso di un semplice codice python per leggere i file json rende l'analisi di un file json in python accessibile a qualsiasi progetto, mentre json.dump python consente di salvare il materiale in modo efficiente.

Commenti:

0 Commenti