Zugriff auf die Eigenschaften einer inneren Klasse eines JSON Files?
Hy Leude, meine Aufgabenstellung sieht so aus:
Erstellen einer person.json mit einem Object nach dem Schema meiner "Person" Klasse. (siehe Code)
Mittels gson lib gilt es nun das Object in JSON Format auszulesen und ein äquivalentes Object vom Typ "Person" zu generieren, um auf alle Eigenschaften zugreifen zu können.
Mein Problem ist, dass der Aufbau der "Person" Klasse eine innere Klasse "Adresse" mit Daten zu der Adresse beinhaltet. Ich weiß nicht wie ich auf diese Adress-Daten zugreifen kann, die anderen Eigenschaften des "Personen" Objects kann ich problemlos mit der toString ausgeben.
//Code Klasse
class Person {
String Titel;
String Vorname;
String Nachname;
int Alter;
public Person(String titel, String vorname, String nachname, int alter) {
Titel = titel;
Vorname = vorname;
Nachname = nachname;
Alter = alter;
}
public class Adresse {
int PLZ;
String Ort;
String Strasse;
int Hausnummer;
public Adresse(int PLZ, String ort, String strasse, int hausnummer) {
this.PLZ = PLZ;
Ort = ort;
Strasse = strasse;
Hausnummer = hausnummer;
}
@Override
public String toString() {
return "Adresse{" +
"PLZ=" + PLZ +
", Ort='" + Ort + '\'' +
", Strasse='" + Strasse + '\'' +
", Hausnummer=" + Hausnummer +
'}';
}
}
@Override
public String toString() {
return "Person{" +
"Titel='" + Titel + '\'' +
", Vorname='" + Vorname + '\'' +
", Nachname='" + Nachname + '\'' +
", Alter=" + Alter +
'}';
}
}
//JSON File: person.json
{
"Titel": "Der Gruene",
"Vorname": "Radar",
"Nachname": "Gast",
"Alter": 120,
"Adresse": {
"PLZ": 37,
"Ort": "Der Einsame Berg",
"Strasse": "Eichenallee",
"Hausnummer": 7
}
}
//Main Code
JsonReader reader2 = new JsonReader(new FileReader("person.json"));
// System.out.println("\nreader of the person.json:\n"+reader2);
Person person = gson.fromJson(reader2, Person.class);
System.out.println("\nfirst object layer of person.json converted to person object\n" + person);
//Output
first object layer of person.json converted to person object
Person{Titel='Der Gruene', Vorname='Radar', Nachname='Gast', Alter=120}
Process finished with exit code 0
1 Antwort
Z.B. so:
//-----------------------------------------------
//Person.java
public class Person {
String Titel;
String Vorname;
String Nachname;
int Alter;
Adresse adresse;
public Person(String titel, String vorname, String nachname, int alter, Adresse adresse) {
Titel = titel;
Vorname = vorname;
Nachname = nachname;
Alter = alter;
this.adresse = adresse;
}
@Override
public String toString() {
return "Person{" +
"Titel='" + Titel + '\'' +
", Vorname='" + Vorname + '\'' +
", Nachname='" + Nachname + '\'' +
", Alter=" + Alter +
", Adresse=" + adresse.toString() +
'}';
}
}
//-----------------------------------------------
//Adresse.java
public class Adresse {
int PLZ;
String Ort;
String Strasse;
int Hausnummer;
public Adresse(int PLZ, String ort, String strasse, int hausnummer) {
this.PLZ = PLZ;
Ort = ort;
Strasse = strasse;
Hausnummer = hausnummer;
}
@Override
public String toString() {
return "Adresse{" +
"PLZ=" + PLZ +
", Ort='" + Ort + '\'' +
", Strasse='" + Strasse + '\'' +
", Hausnummer=" + Hausnummer
'}';
}
}
Ja. Für das Mapping wird GSON automatisch die Klasse (Adresse) auflösen. Die innere Klasse in deinem Code hingegen wird der Bibliothek wohl eher Probleme bereiten, wenn sie eine Instanz von Adresse anlegen möchte.
wie hängen die Person und Adresse nun zusammen? Sind das jetzt nicht zwei eigenständige Objekte?
Nein, es sind zwei Klassen.
Und jedes Objekt der Klasse Person enthält ein Objekt der Klasse Adresse.
das wäre natürlich gewollt, aber ich sehen nicht wo das im code gemacht wird
Dann solltest du dir nochmal alle Stellen im Code ansehen, in denen das Wort "Adresse" bzw. "adresse" vorkommt.
einfach rausnehmen oder wie?