Seite 1 von 1

JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 12:22
von sophe_9
Hallo ich habe ein Problem auf gezielte Werte zuzugreifen, mit den einfachen Objekten funktioniert es. Wie z.B Certificate. Aber wie bekomme ich gezielt die Werte von "Type": "Steigung SZ1 ". Über eine Idee würde ich mich sehr freuen.
Hier ist mein Code:

import json
cal_json ="""{
"Calibration": {
"Certificate": "68743",
"Measurement": {
"Values": {
"Temperature": [
23.514,
23.516,
23.516,
23.513,
23.533
],
"Drift": [
{
"Unit": "mbar/s",
"Type": "Steigung SZ1 ",
"Value": [
0.00000183692,
0.00000202171,
0.00000250477,
0.00000282751,
0.00000418883
]
},
{
"Unit": "mbar/s",
"Type": "Steigung SZ2",
"Value": [
0.000808541,
0.000808274,
0.000809318,
0.000810548,
0.000809628
]
}
]
}
}
}
}
"""
cal_obj = json.loads(cal_json)
print(cal_obj["Calibration"]["Certificate"])

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 12:55
von sparrow
Das json-Modul stellt dir die Daten in Python Datenstrukturen zur Verfügung.
Wenn du die json-Daten schön formatierst, siehst du den Weg. Du musst dich durch die dicts hangeln: cal_obj["Calibration"]["Measurement"] usw.

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 14:22
von sophe_9
Danke für die Antwort, aber das funktioniert nicht.

Wenn ich folgenees eingebe:
print(cal_obj["Calibration"]["Measurement"]["Values"]["Drift"])
ist die Antwort:
[{'Unit': 'mbar/s', 'Type': 'Steigung Drift 1', 'Value': [1.83692e-06, 2.02171e-06, 2.50477e-06, 2.82751e-06, 4.18883e-06]}, {'Unit': 'mbar/s', 'Type': 'Steigung SZ', 'Value': [0.000808541, 0.000808274, 0.000809318, 0.000810548, 0.000809628]}]

Aber die nächste Ebene funktioniert nicht:
print(cal_obj["Calibration"]["Measurement"]["Values"]["Drift"][Value])
Antwort:
NameError Traceback (most recent call last)
<ipython-input-48-af74ac6cb3aa> in <module>()
42 """
43 cal_obj = json.loads(cal_json)
---> 44 print(cal_obj["Calibration"]["Measurement"]["Values"]["Drift"][Value])

NameError: name 'Value' is not defined

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 14:32
von /me
1. Value muss ein String sein, keine Variable.
2. Auch dann funktioniert es noch nicht, da du als nächste Ebene kein Dictionary hast sondern eine Liste von Dictionaries. Du musst also erst das gewünschte Listenelement adressieren.

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 14:48
von __blackjack__
@sophe_9: Für so tief in irgendwelchen verschachtelten Strukturen herumwühlen finde ich `glom` ganz praktisch:

Code: Alles auswählen

#!/usr/bin/env python3
import json

from glom import glom, T


CALIBRATION_JSON = """\
{
   "Calibration": {
    "Certificate": "68743",
    "Measurement": {
      "Values": {
        "Temperature": [
          23.514,
          23.516,
          23.516,
          23.513,
          23.533
        ],
        "Drift": [
          {
            "Unit": "mbar/s",
            "Type": "Steigung SZ1 ",
            "Value": [
              0.00000183692,
              0.00000202171,
              0.00000250477,
              0.00000282751,
              0.00000418883
            ]
          },
          {
            "Unit": "mbar/s",
            "Type": "Steigung SZ2",
            "Value": [
              0.000808541,
              0.000808274,
              0.000809318,
              0.000810548,
              0.000809628
            ]
          }
        ]
      }
    }
  }
}
"""


def main():
    calibration_data = json.loads(CALIBRATION_JSON)
    print(glom(calibration_data, "Calibration.Certificate"))
    print(
        glom(
            calibration_data,
            ("Calibration.Measurement.Values.Drift", T[0], "Type"),
        )
    )


if __name__ == "__main__":
    main()

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 14:50
von einfachTobi
In Drift steckt ja auch eine Liste mit zwei Werten uuund die Anführungsstriche fehlen ebenfalls.
Also zum Beispiel: cal_obj["Calibration"]["Measurement"]["Values"]["Drift"][0]["Value"]

edit: Ihr seid schnell.

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 14:58
von sophe_9
Vielen dank, mit der 0 funkioniert es. Für die schnelle ist es super, aber etwas umständlich, da das File noch komplexer wird und dann nicht mehr eindeutig in der Auswertung. Eine Definition über den Typ wäre da schon besser.
Glom, sagt mir leider nichts und klappt auch leider nicht. Habe es noch nicht verstanden!

Re: JSON-Dateien schreiben und lesen

Verfasst: Mittwoch 3. März 2021, 16:05
von __blackjack__
Also mein Beispiel klappt. Nachdem man `glom` installiert hat zumindest.

Re: JSON-Dateien schreiben und lesen

Verfasst: Donnerstag 4. März 2021, 12:28
von sophe_9
Danke, hat funktioniert