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 facile da analizzare e generare. L'analisi di JSON è estremamente importante quando si lavora con dati provenienti da API, file di configurazione o altre fonti di informazioni memorizzate per qualsiasi sviluppatore Python. Questo articolo illustra le procedure di base per l'analisi di JSON utilizzando il modulo JSON di Python.
JSON rappresenta i dati come coppie chiave-valore, simili a un dizionario Python. Ecco un esempio di base di un oggetto JSON:
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"]
}
Questo oggetto JSON include una stringa, un numero, un booleano e un array. La comprensione di questa struttura è fondamentale per analizzare e manipolare i dati JSON in Python.
Il modulo json di Python semplifica l'analisi di stringhe e file JSON. Questo modulo include metodi come json.loads() per leggere JSON da una stringa e json.load() per leggere JSON da un file. Viceversa, json.dumps() e json.dump() sono utilizzati per scrivere JSON rispettivamente su una stringa e su un file.
Esistono diversi modi per leggere i dati JSON, che vedremo in seguito.
Per leggere i dati JSON da una stringa, utilizzare il metodo json.loads():
import json
json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)
print(data)
Uscita:
Per leggere i dati JSON da un file, utilizzare il metodo json.load():
import json
with open('data.json', 'r') as file:
data = json.load(file)
print(data)
Uscita:
Ecco alcuni modi diversi per scrivere dati JSON:
Per scrivere i dati JSON in una stringa, utilizzare il metodo json.dumps():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
json_string = json.dumps(data)
print(json_string)
Uscita:
Per scrivere i dati JSON su un file, utilizzare il metodo json.dump():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
with open('data.json', 'w') as file:
json.dump(data, file)
Gli oggetti JSON annidati sono comuni quando si lavora con strutture di dati più complesse. Python può gestire facilmente queste strutture annidate.
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:
A volte è necessario convertire oggetti Python personalizzati in JSON. Ciò richiede 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:
Allo stesso modo, per decodificare i dati JSON in oggetti Python personalizzati, è necessario un decodificatore personalizzato.
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:
Lavorare con i dati JSON può portare a diversi errori comuni, in particolare durante l'analisi, la generazione o l'accesso ai dati JSON. Ecco alcuni dei più comuni:
Un errore comune durante l'analisi di JSON è il riscontro di un formato JSON non valido. JSON richiede doppi apici intorno alle chiavi e ai valori delle stringhe e un'adeguata nidificazione 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:
Durante l'analisi dei dati JSON, si possono incontrare chiavi mancanti. Utilizzare il metodo get per fornire un valore predefinito se una chiave è mancante.
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)
Usare il modulo pdb per impostare punti di interruzione e fare il debug del codice di parsing JSON.
import json
import pdb
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)
Il web scraping spesso comporta l'estrazione di dati da API web che restituiscono risposte JSON. Ecco un esempio compatto che utilizza la libreria requests e l'endpoint https://httpbin.org/anything.
Per prima cosa, assicurarsi di avere installato la libreria requests:
pip install requests
Questo codice importa requests per le richieste HTTP e json per gestire i dati JSON. Invia una richiesta GET all'URL di destinazione usando requests.get(url) e analizza la risposta JSON con response.json(), trasformandola in un dizionario Python. Si estraggono e si stampano dati particolari come intestazioni, user agent, origine e URL.
Il codice contiene una forte gestione degli errori; cattura json.JSONDecodeError quando si verifica un errore di decodifica JSON e KeyError quando una chiave specifica è assente, rendendo di conseguenza il programma protetto da crash "senza dati". Questa robustezza del codice consente quindi 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")
Ogni codificatore Python deve sapere come analizzare JSON. Con il modulo JSON e il modo migliore per farlo evidenziato da questo manuale, sarete in grado di leggere, scrivere ed eseguire il debug dei dati JSON abbastanza velocemente. Ciò implica che verificherete regolarmente i vostri codici e farete uso degli strumenti corretti e delle funzionalità più attuali disponibili in Python per migliorare le capacità di gestione di JSON.
Quando si effettua il web scraping, l'analisi di JSON è importante, considerando il fatto che i dati recuperati dalle API web si presentano solitamente sotto forma di JSON Inoltre, è possibile estrarre informazioni da varie fonti web in modo efficiente, se si è in grado di analizzare e manipolare i dati JSON in modo corretto.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0