JSON steht für JavaScript Object Notation. Sie ist nicht nur leichtgewichtig, sondern auch für Menschen einfach zu lesen und zu schreiben. Auch für Maschinen ist es leicht zu parsen und zu generieren. JSON-Parsing ist für jeden Python-Entwickler extrem wichtig, wenn er mit Daten aus APIs, Konfigurationsdateien oder anderen Quellen gespeicherter Informationen arbeitet. Dieser Artikel führt Sie durch grundlegende Verfahren zum Parsen von JSON mit dem JSON-Modul von Python.
JSON stellt Daten als Schlüssel-Wert-Paare dar, ähnlich wie ein Python-Wörterbuch. Hier ist ein grundlegendes Beispiel für ein JSON-Objekt:
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"]
}
Dieses JSON-Objekt enthält eine Zeichenkette, eine Zahl, einen Boolean und ein Array. Das Verständnis dieser Struktur ist grundlegend für das Parsen und Manipulieren von JSON-Daten in Python.
Das json-Modul von Python macht es einfach, JSON-Strings und -Dateien zu analysieren. Dieses Modul enthält Methoden wie json.loads() zum Lesen von JSON aus einer Zeichenkette und json.load() zum Lesen von JSON aus einer Datei. Umgekehrt werden json.dumps() und json.dump() für das Schreiben von JSON in eine Zeichenkette bzw. eine Datei verwendet.
Es gibt mehrere Möglichkeiten, JSON-Daten zu lesen, die wir uns im Folgenden ansehen werden.
Um JSON-Daten aus einem String zu lesen, verwendet man die Methode json.loads():
import json
json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)
print(data)
Ausgabe:
Um JSON-Daten aus einer Datei zu lesen, verwendet man die Methode json.load():
import json
with open('data.json', 'r') as file:
data = json.load(file)
print(data)
Ausgabe:
Hier sind einige verschiedene Möglichkeiten, JSON-Daten zu schreiben:
Um JSON-Daten in einen String zu schreiben, verwenden Sie die Methode json.dumps():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
json_string = json.dumps(data)
print(json_string)
Ausgabe:
Um JSON-Daten in eine Datei zu schreiben, verwenden Sie die Methode 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)
Verschachtelte JSON-Objekte sind üblich, wenn man mit komplexeren Datenstrukturen arbeitet. Python kann diese verschachtelten Strukturen leicht handhaben.
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'])
Ausgabe:
Manchmal muss man benutzerdefinierte Python-Objekte in JSON umwandeln. Dies erfordert einen benutzerdefinierten Kodierer.
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)
Ausgabe:
Um JSON-Daten in benutzerdefinierte Python-Objekte zu dekodieren, benötigt man ebenfalls einen benutzerdefinierten Dekoder.
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)
Ausgabe:
Bei der Arbeit mit JSON-Daten können mehrere häufige Fehler auftreten, insbesondere beim Parsen, Generieren oder Zugreifen auf JSON-Daten. Hier sind einige der häufigsten:
Ein häufiger Fehler beim Parsen von JSON ist das Auftreten eines ungültigen JSON-Formats. JSON erfordert doppelte Anführungszeichen um Schlüssel und Zeichenkettenwerte sowie eine korrekte Verschachtelung von Klammern und geschweiften Klammern.
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}")
Ausgabe:
Beim Parsen von JSON-Daten kann man auf fehlende Schlüssel stoßen. Verwenden Sie die get-Methode, um einen Standardwert bereitzustellen, wenn ein Schlüssel fehlt.
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)
Verwenden Sie das pdb-Modul, um Haltepunkte zu setzen und Ihren JSON-Parsing-Code zu debuggen.
import json
import pdb
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)
Beim Web Scraping werden häufig Daten aus Web-APIs extrahiert, die JSON-Antworten zurückgeben. Hier ist ein kompaktes Beispiel, das die Requests-Bibliothek und den Endpunkt https://httpbin.org/anything verwendet.
Stellen Sie zunächst sicher, dass Sie die requests-Bibliothek installiert haben:
pip install requests
Dieser Code importiert requests für HTTP-Anfragen und json für die Verarbeitung von JSON-Daten. Er sendet eine GET-Anfrage an die Ziel-URL mit requests.get(url) und parst die JSON-Antwort mit response.json() und wandelt sie in ein Python-Wörterbuch um. Wir ziehen bestimmte Daten wie Header, User Agent, Herkunft und URL ab und geben sie aus.
Der Code enthält eine starke Fehlerbehandlung; er erfasst json.JSONDecodeError, wenn ein JSON-Dekodierungsfehler auftritt, und KeyError, wenn ein bestimmter Schlüssel fehlt, so dass das Programm vor "no data"-Abstürzen geschützt ist. Dank dieser Robustheit des Codes kann es echte Web-Scraping-Aufgaben perfekt bewältigen.
import requests
import json
url = 'https://httpbin.org/anything'
response = requests.get(url)
try:
data = response.json()
# Extrahieren bestimmter Daten aus der JSON-Antwort
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")
Jeder Python-Programmierer muss wissen, wie man JSON parst. Mit dem JSON-Modul und der in diesem Handbuch beschriebenen optimalen Vorgehensweise werden Sie in der Lage sein, JSON-Daten schnell genug zu lesen, zu schreiben und zu debuggen. Das setzt voraus, dass Sie Ihre Codes regelmäßig testen und die richtigen Werkzeuge und die aktuellsten Funktionen in Python nutzen, um besser mit JSON umgehen zu können.
Beim Web-Scraping ist das Parsen von JSON wichtig, da die von Web-APIs abgerufenen Daten in der Regel in Form von JSON vorliegen. Außerdem können Sie Informationen aus verschiedenen Webquellen effizient extrahieren, wenn Sie JSON-Daten gut parsen und manipulieren können.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0