Pythonische JSON-Datenverarbeitung

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

JSON (JavaScript Object Notation) ist ein beliebiges Datenformat zum Speichern von Daten in einer serialisierten und menschenlesbaren Form. Es wird üblicherweise zum Übertragen von Daten zwischen einem Server und einer Webanwendung verwendet und ist auch eine ausgezeichnete Wahl zum Speichern von Daten in einer NoSQL-Datenbank. In Python können wir das Modul json verwenden, um mit JSON-Daten umzugehen.

Errungenschaften

  • JSON-Dateien lesen und schreiben
  • JSON-Daten serialisieren und deserialisieren

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/with_statement("Using with Statement") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/PythonStandardLibraryGroup -.-> python/data_serialization("Data Serialization") subgraph Lab Skills python/dictionaries -.-> lab-85{{"Pythonische JSON-Datenverarbeitung"}} python/standard_libraries -.-> lab-85{{"Pythonische JSON-Datenverarbeitung"}} python/file_reading_writing -.-> lab-85{{"Pythonische JSON-Datenverarbeitung"}} python/with_statement -.-> lab-85{{"Pythonische JSON-Datenverarbeitung"}} python/data_collections -.-> lab-85{{"Pythonische JSON-Datenverarbeitung"}} python/data_serialization -.-> lab-85{{"Pythonische JSON-Datenverarbeitung"}} end

JSON Einführung

JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenwechselformat, das für Menschen einfach lesbar und zu schreiben ist und für Maschinen einfach zu analysieren und zu generieren. Es basiert auf einem Teilsatz der JavaScript-Programmiersprache, Standard ECMA-262, 3. Auflage - Dezember 1999. JSON ist ein Textformat, das völlig sprachunabhängig ist, verwendet jedoch Konventionen, die Programmierern der C-Familie von Sprachen, einschließlich C, C++, C#, Java, JavaScript, Perl, Python und vieler anderer, vertraut sind. Diese Eigenschaften machen JSON zu einer idealen Datenwechselsprache.

Die grundlegende Struktur von JSON besteht aus Objekten, die Sammlungen von Schlüssel-Wert-Paaren sind, und Arrays, die geordnete Listen von Werten sind.

Hier ist ein Beispiel für ein JSON-Objekt:

{
  "name": "Alice",
  "age": 26,
  "city": "New York"
}

Dieses JSON-Objekt hat drei Schlüssel-Wert-Paare:

  • "name" : "Alice"
  • "age" : 26
  • "city" : "New York"

Hier ist ein Beispiel für ein JSON-Array:

["apple", "banana", "cherry"]

Dieses JSON-Array hat drei Werte: "apple", "banana" und "cherry".

Ein JSON-Objekt kann mehrere Schlüssel-Wert-Paare und Arrays enthalten, und ein JSON-Array kann mehrere Objekte und Arrays enthalten. Hier ist ein Beispiel für eine komplexere JSON-Struktur:

{
  "employees": [
    { "firstName": "John", "lastName": "Doe" },
    { "firstName": "Anna", "lastName": "Smith" },
    { "firstName": "Peter", "lastName": "Jones" }
  ],
  "owners": [
    { "name": "Alice", "age": 30 },
    { "name": "Bob", "age": 35 }
  ],
  "office": {
    "name": "Acme Inc.",
    "location": "New York"
  }
}

Dieses JSON-Objekt hat drei Schlüssel-Wert-Paare:

  • "employees" : ein Array von Mitarbeiterobjekten
  • "owners" : ein Array von Eigentümerobjekten
  • "office" : ein Büroobjekt

Json-Modul

Um ein JSON-Objekt in Python zu analysieren, können wir das json-Modul verwenden. Das json-Modul ist Teil der Python-Standardbibliothek, sodass wir es nicht separat installieren müssen.

Öffnen Sie eine neue Python-Interpreter-Sitzung und geben Sie folgenden Code ein:

python3

Hier ist ein Beispiel dafür, wie das JSON-Objekt aus dem vorherigen Beispiel analysiert wird:

import json

json_strings = '{"employees": [{ "firstName": "John", "lastName": "Doe"}, ], "owners": [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 35 }], "office": {"name": "Acme Inc."}}'

## Analysieren Sie das JSON-Objekt
data = json.loads(json_strings)

## Greifen Sie auf die Daten zu
employees = data['employees']
owners = data['owners']
office = data['office']

## Drucken Sie die Daten
print(employees)
print(owners)
print(office)

Dies wird folgendes ausgeben:

[{'firstName': 'John', 'lastName': 'Doe'}]
[{'name': 'Alice', 'age': 30}, { "name": "Bob", "age": 35 }]
{'name': 'Acme Inc.'}

Anschließend können Sie auf die Daten im JSON-Objekt mithilfe von Schlüsseln und Indizes zugreifen, genauso wie Sie es mit einem Python-Wörterbuch oder -Liste tun würden. Beispielsweise können Sie den Vornamen des ersten Mitarbeiters abrufen, indem Sie folgenden Code verwenden:

first_employee = employees[0]
first_name = first_employee['firstName']
print(first_name)

Dies wird folgendes ausgeben:

John

Sie können auch durch die Arrays iterieren und auf die Daten jedes Elements zugreifen. Beispielsweise können Sie den Namen und das Alter jedes Besitzers ausgeben, indem Sie folgenden Code verwenden:

for owner in owners:
  name = owner['name']
  age = owner['age']
  print(f'{name} ist {age} Jahre alt.')

Dies wird folgendes ausgeben:

Alice ist 30 Jahre alt.
Bob ist 35 Jahre alt.

JSON-Dateien lesen

Lassen Sie uns mit dem Lesen einer JSON-Datei beginnen. Angenommen, wir haben eine Datei employees.json mit den folgenden Inhalten:

{
  "employees": [
    {
      "firstName": "John",
      "lastName": "Doe"
    },
    {
      "firstName": "Anna",
      "lastName": "Smith"
    },
    {
      "firstName": "Peter",
      "lastName": "Jones"
    }
  ]
}

employees.json existiert bereits im Verzeichnis /home/labex/project.

Um diese Datei in Python zu lesen, können wir folgenden Code verwenden:

import json

## Öffnen Sie die Datei
with open('/home/labex/project/employees.json', 'r') as file:
  ## Laden Sie den Inhalt der Datei in eine Variable
  data = json.load(file)

## Drucken Sie den Inhalt der Datei
print(data)

Dies wird folgendes ausgeben:

{'employees': [{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]}

Wir können auf die Daten in der Datei zugreifen, indem wir die Schlüssel des JSON-Objekts verwenden, genauso wie wir es mit einem Python-Wörterbuch tun würden. Beispielsweise können wir die Liste der Mitarbeiter über den Schlüssel employees zugreifen:

employees = data['employees']
print(employees)

Dies wird folgendes ausgeben:

[{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]

Wir können auch durch die Liste der Mitarbeiter iterieren und ihre Namen ausgeben:

for employee in employees:
  print(employee['firstName'], employee['lastName'])

Dies wird folgendes ausgeben:

John Doe
Anna Smith
Peter Jones

JSON-Dateien schreiben

Da wir wissen, wie man eine JSON-Datei liest, lernen wir nun, wie man in eine schreibt. Wir können die Funktion json.dump() verwenden, um Daten in eine JSON-Datei zu schreiben.

Angenommen, wir haben eine Liste von Wörterbüchern, die Informationen über Studenten enthalten. Wir können diese Daten in eine Datei namens students.json schreiben, wie folgt:

import json

## Eine Liste von Wörterbüchern
students = [
  { "name": "Alice", "age": 26, "major": "Computer Science" },
  { "name": "Bob", "age": 27, "major": "Economics" },
  { "name": "Charlie", "age": 25, "major": "Physics" }
]

## Öffnen Sie die Datei
with open('students.json', 'w') as file:
  ## Schreiben Sie die Daten in die Datei
  json.dump(students, file)

Lassen Sie uns nun überprüfen, ob die Daten korrekt geschrieben wurden:

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

Dies wird folgendes ausgeben:

[
  { "name": "Alice", "age": 26, "major": "Computer Science" },
  { "name": "Bob", "age": 27, "major": "Economics" },
  { "name": "Charlie", "age": 25, "major": "Physics" }
]

Wir können auch die Funktion json.dumps() verwenden, um ein Python-Objekt in einen JSON-String zu konvertieren, den wir dann in eine Datei speichern oder über das Netzwerk senden können. Hier ist ein Beispiel:

## Konvertieren Sie die Liste von Wörterbüchern in einen JSON-String
json_string = json.dumps(students)
print(json_string)

## Speichern Sie den String in einer Datei
with open('students.json', 'w') as file:
  file.write(json_string)

## Lassen Sie uns nun überprüfen, ob die Daten korrekt geschrieben wurden
with open('students.json', 'r') as file:
  data = json.load(file)
  print(data)

Dies wird die gleiche Ausgabe wie das vorherige Beispiel haben.

Python-Objekt und JSON-String

Ein Python-Objekt ist eine Sammlung von Daten in Form von Listen, Wörterbüchern usw., die im Speicher gespeichert ist. Ein JSON-String dagegen ist eine serialisierte Darstellung eines JSON-Objekts. Es ist ein Zeichenkette, die die Daten im JSON-Objekt repräsentiert, aber nicht als tatsächliches Objekt im Speicher gespeichert ist.

Hier ist ein Beispiel dafür, wie die read()-Funktion verwendet wird, um den Inhalt von students.json zu lesen:

with open('students.json', 'r') as file:
  json_string = file.read()
  print(json_string)

Dies wird folgendes ausgeben:

[{"name": "Alice", "age": 26, "major": "Computer Science"}, {"name": "Bob", "age": 27, "major": "Economics"}, {"name": "Charlie", "age": 25, "major": "Physics"}]

Wenn Sie versuchen, das erste Element von json_string abzurufen, erhalten Sie das erste Zeichen der Zeichenkette:

print(json_string[0])
[

Dies liegt daran, dass json_string eine Zeichenkette ist, nicht eine Liste (Python-Objekt). Um es in eine Liste zu konvertieren, können wir die json.loads()-Funktion verwenden:

import json

## Konvertieren Sie den JSON-String in ein Python-Objekt
python_object = json.loads(json_string)
print(python_object)

Die Ausgabe ist ähnlich wie oben, mit dem Unterschied zwischen einfachen und doppelten Anführungszeichen.

[{'name': 'Alice', 'age': 26,'major': 'Computer Science'}, {'name': 'Bob', 'age': 27,'major': 'Economics'}, {'name': 'Charlie', 'age': 25,'major': 'Physics'}]

Jetzt können wir das erste Element der Liste abrufen:

print(python_object[0])
{ "name": "Alice", "age": 26, "major": "Computer Science" }

Anfänger verwechseln oft Python-Objekte und JSON-Strings, also achten Sie besonders darauf.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Labor zu JSON-Dateien abgeschlossen. Sie haben gelernt, wie man JSON-Dateien in Python liest und schreibt. Sie haben auch gelernt, wie man mit JSON-Daten in Python umgeht.