Seite 1 von 1

KeyError beim Einlesen von json-Daten in python

Verfasst: Freitag 28. November 2025, 09:00
von SuperM
Hallo zusammen,

ich bin neu hier und hoffe, dass mir jemand helfen kann. :)

Ich versuche Werte aus einem json-String herauszuholen.

json Inhalt:

Code: Alles auswählen

{"properties":{"password":{"key":"password","value":"SomePWD"},"enablePassword":{"key":"enablePassword","value":""},"username":{"key":"username","value":"SomeUsername"}}}admin@server:~$ 
python code:

Code: Alles auswählen

credential_py = json.loads(credential.text)

ssh_password = (credential_py['password']['value'])
ssh_username = (credential_py['username']['value'])
Ich erhalten folgenden Fehler:
KeyError: 'password'

Vielen Dank für eure Hilfe! :)

Re: KeyError beim Einlesen von json-Daten in python

Verfasst: Freitag 28. November 2025, 14:31
von Sirius3
Hier mal der Json-String schön formatiert:

Code: Alles auswählen

{
    "properties": {
        "password": {"key": "password", "value": "SomePWD"},
        "enablePassword": {"key": "enablePassword", "value": ""},
        "username": {"key": "username", "value": "SomeUsername"}
    }
}
Dann sieht man, dass man eine zusätzliche Ebene hat, "properties".

Code: Alles auswählen

credential_py = json.loads(credential.text)["properties"]
ssh_password = credential_py["password"]["value"])
ssh_username = credential_py["username"]["value"]
Zusätzlich sollte man demjenigen, der dieses JSON erfunden hat, sagen, dass ein Wörterbuch dazu da ist, einen Schlüssel auf einen Wert abzubilden, da braucht es kein extra Wörterbuch mit den Keys key und value.

Re: KeyError beim Einlesen von json-Daten in python

Verfasst: Samstag 29. November 2025, 21:15
von __blackjack__
Hier mal Code zum sinnvollen umstrukturieren der Eingabedaten.

Code: Alles auswählen

data = {
    "properties": {
        "password": {"key": "password", "value": "SomePWD"},
        "enablePassword": {"key": "enablePassword", "value": ""},
        "username": {"key": "username", "value": "SomeUsername"},
    }
}
# Ziel:
# {"password": "SomePWD", "enablePassword": "", "username": "SomeUsername"}
Mit Syntax:

Code: Alles auswählen

restructured = {
    property_["key"]: property_["value"]
    for property_ in data["properties"].values()
}
Mit `operator.itemgetter()`:

Code: Alles auswählen

from operator import itemgetter

restructured = dict(
    map(itemgetter("key", "value"), data["properties"].values())
)
Mit Kanonen auf Spatzen, äh, mit `glom()`:

Code: Alles auswählen

from glom import glom, Merge, Spec

restructured = glom(data, ("properties.*", [{Spec("key"): "value"}], Merge()))
Wobei man damit auch schön per ”Pfad” auf die beiden Werte im Originalzustand zugreifen kann:

Code: Alles auswählen

ssh_username = glom(data, "properties.username.value")
ssh_password = glom(data, "properties.password.value")
Oder man benutzt ``match``/``case``:

Code: Alles auswählen

match data:
    case {
        "properties": {
            "username": {"value": str() as ssh_username},
            "password": {"value": str() as ssh_password},
        }
    }:
        do_something_with(ssh_username, ssh_password)

    case _:
        raise ValueError("...")