leere JSON Objekte mit None füllen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ofenkäse
User
Beiträge: 2
Registriert: Mittwoch 19. Januar 2022, 08:24

Hay zusammen,

ich bin recht neu in Python und habe jetzt ein kleines Problem wo mir Google etc. nicht weiterhelfen konnte.


Ich habe eine XML Datei (https://eyes.nasa.gov/dsn/data/dsn.xml) in eine JSON umgewandelt.

Nun brauche ich nicht jedes Object und umgebaut werden möchte ich auch.

Da jetzt aber nicht immer ein <downSignal>,<upSignal> oder <target> Object vorhanden ist habe ich das problem das ich denn fehler bekomme das diese nicht vorhanden sind. (ergibt ja sind)

Gibt es eine möglichkeit zu prüfen ob downSignal etc. vorhanden ist und wenn nicht das einfach die Objecte zwar erstellt werden aber ein null wert bekommen?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja die Möglichkeit gibt es. Wie sieht denn Dein Code bisher aus?
Ofenkäse
User
Beiträge: 2
Registriert: Mittwoch 19. Januar 2022, 08:24

Momentan sieht es so aus.

Bei ID 11 gibt es z.B. ein downSignal aber bei ID 12 gibt es die wieder nicht und dann bekommt man eben den fehler das es nicht in der Datei existiert.

Code: Alles auswählen

import json
import xmltodict
import requests
import xml.etree.ElementTree as ET

def abfrage():
    r = requests.get("https://eyes.nasa.gov/dsn/data/dsn.xml")
    root = ET.fromstring(r.text)
    tree = ET.ElementTree(root)
    tree.write("dsn.xml")
    with open("dsn.xml","r") as xmlfileObj:
        data_dict = xmltodict.parse(xmlfileObj.read())
        xmlfileObj.close() 
        jsonObj= json.dumps(data_dict, indent=6)
        with open("dsn_roh.json", "w") as jsonfileObj:
            jsonfileObj.write(jsonObj)
            jsonfileObj.close()


def speichern():
    with open('dsn_roh.json','r') as file:
        obj = json.load(file)

    fileName = "dsn.json"
    jsonObject = {
        "dsn": {
            "station": [
                {
                    "id": 1,
                    "name": obj['dsn']['station'][0]['@friendlyName'],
                    "kurzname": obj['dsn']['station'][0]['@name'],
                    "timeUTC": obj['dsn']['station'][0]['@timeUTC'],
                    "timeZoneOffset": obj['dsn']['station'][0]['@timeZoneOffset'],
                    "dish": [
                        {
                            "id": 11,
                            "name": obj['dsn']['dish'][0]['@name'],
                            "azimuthAngle": obj['dsn']['dish'][0]['@azimuthAngle'],
                            "elevationAngle": obj['dsn']['dish'][0]['@elevationAngle'],
                            "windSpeed": obj['dsn']['dish'][0]['@windSpeed'],
                            "isMSPA": obj['dsn']['dish'][0]['@isMSPA'],
                            "isArray": obj['dsn']['dish'][0]['@isArray'],
                            "isDDOR": obj['dsn']['dish'][0]['@isDDOR'],
                            "created": obj['dsn']['dish'][0]['@updated'],
                            "downSignal": {
                                "signalType": obj['dsn']['dish'][0]['downSignal']['@signalType'],
                                "signalTypeDebug": obj['dsn']['dish'][0]['downSignal']['@signalTypeDebug'],
                                "dataRate": obj['dsn']['dish'][0]['downSignal']['@dataRate'],
                                "frequency": obj['dsn']['dish'][0]['downSignal']['@frequency'],
                                "power": obj['dsn']['dish'][0]['downSignal']['@power'],
                                "spacecraft": obj['dsn']['dish'][0]['downSignal']['@spacecraft'],
                                "spacecraftID": obj['dsn']['dish'][0]['downSignal']['@spacecraftId'],
                            },
                            "upSignal": {
                                "signalType": obj['dsn']['dish'][0]['upSignal']['@signalType'],
                                "signalTypeDebug": obj['dsn']['dish'][0]['upSignal']['@signalTypeDebug'],
                                "dataRate": obj['dsn']['dish'][0]['upSignal']['@dataRate'],
                                "frequency": obj['dsn']['dish'][0]['upSignal']['@frequency'],
                                "power": obj['dsn']['dish'][0]['upSignal']['@power'],
                                "spacecraft": obj['dsn']['dish'][0]['upSignal']['@spacecraft'],
                                "spacecraftID": obj['dsn']['dish'][0]['upSignal']['@spacecraftId'],
                            },
                            "target": {
                                    "name": obj['dsn']['dish'][0]['target']['@name'],
                                    "id": obj['dsn']['dish'][0]['target']['@id'],
                                    "uplegRange": obj['dsn']['dish'][0]['target']['@uplegRange'],
                                    "downlegRange": obj['dsn']['dish'][0]['target']['@downlegRange'],
                                    "rtlt": obj['dsn']['dish'][0]['target']['@rtlt'],
                            },
                        },
                        {
                            "id": 12,
                            "name": obj['dsn']['dish'][1]['@name'],
                            "azimuthAngle": obj['dsn']['dish'][1]['@azimuthAngle'],
                            "elevationAngle": obj['dsn']['dish'][1]['@elevationAngle'],
                            "windSpeed": obj['dsn']['dish'][1]['@windSpeed'],
                            "isMSPA": obj['dsn']['dish'][1]['@isMSPA'],
                            "isArray": obj['dsn']['dish'][1]['@isArray'],
                            "isDDOR": obj['dsn']['dish'][1]['@isDDOR'],
                            "created": obj['dsn']['dish'][1]['@updated'],
                            "downSignal": {
                                "signalType": obj['dsn']['dish'][1]['downSignal']['@signalType'],
                                "signalTypeDebug": obj['dsn']['dish'][1]['downSignal']['@signalTypeDebug'],
                                "dataRate": obj['dsn']['dish'][1]['downSignal']['@dataRate'],
                                "frequency": obj['dsn']['dish'][1]['downSignal']['@frequency'],
                                "power": obj['dsn']['dish'][1]['downSignal']['@power'],
                                "spacecraft": obj['dsn']['dish'][1]['downSignal']['@spacecraft'],
                                "spacecraftID": obj['dsn']['dish'][1]['downSignal']['@spacecraftId'],
                            },
                            "upSignal": {
                                "signalType": obj['dsn']['dish'][1]['upSignal']['@signalType'],
                                "signalTypeDebug": obj['dsn']['dish'][1]['upSignal']['@signalTypeDebug'],
                                "dataRate": obj['dsn']['dish'][1]['upSignal']['@dataRate'],
                                "frequency": obj['dsn']['dish'][1]['upSignal']['@frequency'],
                                "power": obj['dsn']['dish'][1]['upSignal']['@power'],
                                "spacecraft": obj['dsn']['dish'][1]['upSignal']['@spacecraft'],
                                "spacecraftID": obj['dsn']['dish'][1]['upSignal']['@spacecraftId'],
                            },
                            "target": {
                                    "name": obj['dsn']['dish'][1]['target']['@name'],
                                    "id": obj['dsn']['dish'][1]['target']['@id'],
                                    "uplegRange": obj['dsn']['dish'][1]['target']['@uplegRange'],
                                    "downlegRange": obj['dsn']['dish'][1]['target']['@downlegRange'],
                                    "rtlt": obj['dsn']['dish'][1]['target']['@rtlt'],
                            },  
                        },
                {
                    "id": 2,
                    "name": obj['dsn']['station'][1]['@friendlyName'],
                    "kurzname": obj['dsn']['station'][1]['@name'],
                    "timeUTC": obj['dsn']['station'][1]['@timeUTC'],
                    "timeZoneOffset": obj['dsn']['station'][1]['@timeZoneOffset'],
                },
                {
                    "id": 3,
                    "name": obj['dsn']['station'][2]['@friendlyName'],
                    "kurzname": obj['dsn']['station'][2]['@name'],
                    "timeUTC": obj['dsn']['station'][2]['@timeUTC'],
                    "timeZoneOffset": obj['dsn']['station'][2]['@timeZoneOffset'],
                },
            ],
        }
    }
    file = open(fileName, "w")
    json.dump(jsonObject, file, indent=6)
    file.close()

abfrage()
speichern()

Antworten