Reduzieren Sie JSON in Python

Ammar Ali 21 Juni 2023
Reduzieren Sie JSON in Python

In diesem Tutorial wird das Abflachen von JSON mit bedingten Anweisungen, Schleifen und der Funktion type() in Python besprochen.

Reduzieren Sie JSON in Python

JSON ist ein Dateiformat und steht für JavaScript Object Notation. JSON speichert und überträgt Daten, die ein Mensch lesen und verstehen kann.

Wir sehen verschiedene Attribute mit Werten, die durch Arrays oder Listen in einer JSON-Datei getrennt sind. Beispielsweise können wir eine JSON-Datei verwenden, um Schülerdaten wie Name, Alter, Adresse und Klasse zu speichern.

Die Daten jedes Schülers werden in einem Array gespeichert, das Attribute und Werte verschiedener Datentypen enthält. Beispielsweise ist unten eine Beispiel-JSON-Datei angegeben.

{"Ali" : {
      "age": 18,
      "profession": "student"},
 "Ammar" : {
      "age" : "nineteen",
      "profession": "mechanic"}
 }

Die obige Datei enthält Informationen über zwei Personen, die wir mit der json-Bibliothek von Python lesen können. Lesen Sie beispielsweise die obige Datei mit der Bibliothek json und zeigen Sie deren Inhalt an.

Siehe Code unten.

import json

json_file = open("people.json")
data = json.load(json_file)
print("Original Data\n", data)

Ausgang:

Original Data
 {'Ali': {'age': 18, 'profession': 'student'}, 'Ammar': {'age': 'nineteen', 'profession': 'mechanic'}}

Wir müssen den Dateinamen und seine Erweiterung in der Funktion open() angeben, um sie zu lesen, und wenn sich die Datei nicht im selben Verzeichnis wie die Python-Datei befindet, müssen wir den vollständigen Pfad der Datei zusammen mit ihrem angeben Name und Erweiterung innerhalb der Funktion open(). Wir haben die Funktion load() der Bibliothek json verwendet, um die JSON-Daten zu lesen.

Wir können die Daten einer einzelnen Person erhalten, indem wir ihren Namen in der Datenvariablen wie data['Ali'] verwenden. Wenn wir eine JSON-Datei mit mehreren Ebenen haben, die eine große Datenmenge enthält, wird es schwierig, den Wert eines bestimmten Attributs zu lesen.

In einer mehrstufigen JSON-Datei haben wir Attribute in anderen Attributen wie Listen oder dicts. Wir können Attributnamen kombinieren, wenn wir die JSON-Datei mit mehreren Ebenen in eine einzelne Ebene konvertieren möchten.

Wenn wir beispielsweise im obigen Code das Alter von Ali erhalten möchten, können wir mit data['Ali']['age'] darauf zugreifen, aber wenn wir die Attributnamen kombinieren, können wir verwenden data['Ali_age'] um das Alter von Ali zu erhalten.

Wir können eine rekursive Funktion verwenden, die sich selbst mehrmals aufruft, um die JSON-Daten zu vereinfachen. Wir müssen Daten aus der JSON-Datei lesen und in zwei Schleifen nach list und dict in den Daten suchen.

Wir werden Schleifen verwenden, um die Namen der Attribute mit einem Trennzeichen zu kombinieren und ihren Wert in einem dict-Format zu speichern. Die Schleifen werden beendet, wenn sich keine Daten mehr in der JSON-Datei befinden, und das Ergebnis wird zurückgegeben.

Lassen Sie uns beispielsweise die obige JSON-Datei vereinfachen. Siehe Code unten.

import json

json_file = open("people.json")
data = json.load(json_file)
print("Original Data\n", data)


def flatten_json_data(json_data):
    out = {}

    def flatten_json(d, name=""):
        if type(d) is dict:
            for a in d:
                flatten_json(d[a], name + a + "_")
        elif type(d) is list:
            i = 0
            for a in d:
                flatten_json(a, name + str(i) + "_")
                i += 1
        else:
            out[name[:-1]] = d

    flatten_json(json_data)
    return out


flattened_data = flatten_json_data(data)
print("\nflatten Data\n", flattened_data)

Ausgang:

Original Data
 {'Ali': {'age': 18, 'profession': 'student'}, 'Ammar': {'age': 'nineteen', 'profession': 'mechanic'}}

flatten Data
 {'Ali_age': 18, 'Ali_profession': 'student', 'Ammar_age': 'nineteen', 'Ammar_profession': 'mechanic'}

Im obigen Code verwenden wir die bedingte Anweisung if-else, um den Eingabedatentyp zu überprüfen, und die Funktion type(), die den Datentyp von Objekten zurückgibt. Wenn beim Lesen der Daten ein dict kommt, funktioniert die erste Schleife; Wenn eine Liste kommt, funktioniert die zweite Schleife.

In der obigen Ausgabe können wir sehen, dass die Originaldaten zwei dicts enthalten, aber die abgeflachten Daten enthalten nur ein dict. Die JSON-Beispieldatei enthält keine Listen, aber der obige Code funktioniert auch mit JSON-Dateien, die Listen enthalten.

Es gibt einen Unterschied zwischen den Originaldaten und den reduzierten Daten; Wir können das Alter und den Beruf einer Person gleichzeitig mit den Originaldaten erhalten, da Alter und Beruf dasselbe übergeordnete Attribut haben, nämlich den Namen der Person, aber wir können dasselbe nicht mit den abgeflachten Daten tun.

Um das Alter und den Beruf einer Person unter Verwendung der abgeflachten Daten zu erhalten, müssen wir sie einzeln einzeln abrufen.

Eine vereinfachte JSON-Datei ist nützlich, wenn wir nur einen einzelnen Wert abrufen müssen, aber wir können die ursprüngliche JSON-Datei verwenden, wenn wir alle Informationen zu einem Objekt oder Attribut abrufen möchten. Unter diesem Link finden Sie weitere Details zur JSON-Bibliothek.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Verwandter Artikel - Python JSON