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?
leere JSON Objekte mit None füllen
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.
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()