Json-String zu Json-Objekt umwandeln

Kalito

Erfahrenes Mitglied
Hallo,

ich bekomme einen JSON-String, welcher folgendes Format hat:
Code:
String json  = "{"method":"login", "daten":{"username":"Benutzer", "password":"Benutzerpasswort"}}";

Das Problem, das ich zum dem Zeitpunkt nicht die Anzahl der Daten in dem Feld daten kenne.
Am ende hätte ich gerne sowas:

Code:
//Umwandlung des JSON-String

System.out.println(Objekt.login);
System.out.println(Objekt.username);
System.out.println(Objekt.password);

Gruß, Kalito
 

slowfly

Erfahrenes Mitglied
Tipp, ohne auf das Problem einzugehen: Verwende am besten eine lib, die dir die Arbeit abnimmt. Wir verwenden hier gson, und das macht alles viel einfacher. So kann ich dem gson einen String angeben, sag ihm die Klasse, in welche es gemappt werden muss, und bekomme automatisch eine Instanz mit den gemappten Feldern zurück. Und das funktioniert auch mit Listen.

Das Problem, das ich zum dem Zeitpunkt nicht die Anzahl der Daten in dem Feld daten kenne.
Du musst es nur zählen ;)

Gruss
slowy
 

Kalito

Erfahrenes Mitglied
Ich habe mir Gson angeschaut, aber irgendwie bin ich nicht schlau daraus geworden.
Code:
public class JsonToObject {
	public JsonToObject() {
	    // no-args constructor
	  }
}

public class Main{

    public static void main(String[] args) throws IOException{

    Gson gson = new Gson();
    JsonToObject JsonObject = new JsonToObject();

    String json  = "{"method":"login", "daten":{"username":"Benutzer", "password":"Benutzerpasswort"}}";  
 
    JsonToObject obj = gson.fromJson(str, JsonToObject.class);
	
    System.out.println(obj);
    }

}

Das ist mein aktueller Code mit Gson. Doch wie kann ich nun auf die Daten in dem Objekt zugreifen?

Das Problem ist, das ich bei der Umwandlung von dem String in das Objekt nicht weiß, was in dem "daten"-Teil steht. Der Aufbau des Json ist immer gleich, aber der Datenteil ist unterschiedlich, da ich verschiedene Methoden mit dem Json beliefere. Und ich möchte eigentlich nur einmal die Funktion Objekterstellung schreiben und nicht für jede Funktion eine.
 
Zuletzt bearbeitet:

socke77

Mitglied
Na da biste ja fast fertig, deine Bean JsonToObject muss nur noch dem JSON Konstrukt entsprechen.
Code:
/**
 * Model for
 * String json  = "{"method":"login", "daten":{"username":"Benutzer", "password":"Benutzerpasswort"}}";
 */
public class JsonToObject {

    private String login;
    
    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public Daten getDaten() {
        return daten;
    }

    public void setDaten(Daten daten) {
        this.daten = daten;
    }

    private Daten daten;
    
    public static class Daten {
        public String username;
        
        public String passwort;
        
        public String getUsername() {
            return username;
        }
        
        public void setUsername(String username) {
            this.username = username;
        }
        
        public String getPasswort() {
            return passwort;
        }
        
        public void setPasswort(String passwort) {
            this.passwort = passwort;
        }
    }
}

Dann kannst du mit obj.getLogin() bzw. obj.Daten.getPasswort() darauf zugreifen