JirkaDellOro / Softwaredesign

Modul "Softwaredesign": Lektionen und Übungsaufgaben
12 stars 12 forks source link

JSON in typescript einfügen #32

Open DesiS96 opened 4 years ago

DesiS96 commented 4 years ago

Hallo Jirka, ich versuche seit gestern meine JSON Dateien in mein Programm einzubringen. Habe schon viele Vorschläge von Kommilitonen bekommen aber keine der Varianten hat funktioniert. Sei es mit import (da hatte der javascript-Teil irgendwelche Referenzprobleme) mithilfe eigens geschriebener import-files(gleiches Problem). Ich habe mir auch die loadJSON aus der Vorlesung nochmal angesehen werde aus der aber auch nicht ganz schlau. Hättest du noch irgendeinen Tipp wie man das noch angehen könnte? Danke im Voraus

JirkaDellOro commented 4 years ago

Meine Vorlage aus dem Seminar sollte eigentlich passen. Lass uns schauen, dass Du daraus schlau wirst. Wo klemmt's dabei gerade? Bis Donnerstag bin ich gerade aber auf einem Lehrgang und daher nur sehr sporadisch erreichbar. Deswegen hoffe ich, dass deine Kommilitonen mithelfen.

DesiS96 commented 4 years ago

Ich habe mal eine test.json bestehend aus strings geschrieben und ein Interface für den Typ Data welcher ja später aus der Methode erhalten wird. Wenn ich dann aber die Methode mithilfe des filenames also test.json ausführe und die geladenen Dateien probeweise versuche auszugeben bekomme ich nur Fehler in der Konsole angezeigt: Fetch API cannot load. URL scheme must be "http" or "https" for CORS request. Will das eine URL? Aber die load Methode bezieht sich doch auf lokale jsons oder?

DesiS96 commented 4 years ago

Mir wurde geantwortet und ich weiß jetzt wo der Fehler lag. Ich denke ich komme jetzt doch erstmal wieder klar :)

DesiS96 commented 4 years ago

Ich hätte doch noch eine Frage. Und zwar kann ich die geladenen Elemente nicht nutzen. Wenn ich z.b den Raum-Array lade und irgendwo z.b die Länge des Arrays verwenden möchte sagt mir das Programm, dass das mit Promise<Room[]> nicht geht. Ich verstehe nicht wie ich dieses Promise in eine richtiges Objekt umwandle.

JirkaDellOro commented 4 years ago

Wie im Seminar geübt musst Du die Seite über einen lokalen Server laden, z.B. über "npx serve" oder das LiveServer-Plugin für VSCode.

JirkaDellOro commented 4 years ago

Wenn Du etwas lädst, kriegst Du zunächst einen Text, der dann in ein JSON-Objekt umgewandelt werden kann. Diesem solltest Du dann die Daten und auch die Länge von Arrays entnehmen können.

DesiS96 commented 4 years ago

Achso ich hatte angenommen, dass die Methode das Umwandeln in ein JSON-Objekt bereits übernimmt. Danke für die Antwort.

JirkaDellOro commented 4 years ago

Es kommt darauf an, welche Methode Du verwendest. Wenn Du einen Link auf deinen Code postest, könnte ich mir das ansehen.

DesiS96 commented 4 years ago

https://github.com/DesiS96/Software-Design/blob/master/Abschlussaufgabe/main.ts

DesiS96 commented 4 years ago

Das ist der momentane Stand

JirkaDellOro commented 4 years ago

Aus der Lade-Funktion gibst Du das JSON-Objekt als Objekt vom Typ Data zurück. Daher würde ich erwarten, dass auch folgendes akzeptiert werden müsste:

let roomA: Data = loadRooms("./rooms.json");

spätestens, wenn Du await for loadRooms schreibst.

Allerding frage ich mich auf einer höheren Ebene, ob ein string|number-Array tatsächlich der richtige Typ sein soll mit dem Du deine Strukturen beschreibst...?

DesiS96 commented 4 years ago

Das hatte ich anfangs mal probiert aber dann streicht es mir die Variable an und meint, dass property data in Promise deswegen nicht akzeptiert. Ich hatte auch mal versucht einen Raum zu übergeben und da kam die gleiche Meldung. Ich habe jetzt auch mal einen RoomData Typen definiert der alle Properties beinhaltet die auch die Room-Klasse hat und welche in der Json stehen. Die Load-Funktion gibt jetzt einen RoomData-Array aus, allerdings ist da die Rückmeldung wenn ich versuche den output der Funktion einer RoomData[] Variable zu übergeben, dass Promise<RoomData[]> properties wie length nicht besitzt.

JirkaDellOro commented 4 years ago

Wollen wir kurz online gehen?

DesiS96 commented 4 years ago

Ja

JirkaDellOro commented 4 years ago

dm16