Hallo,
ich habe mal wieder eine Verständnisfrage,diesmal zu JSON. Hier erstmal der Code:
Wie man sieht, wird ein JSON-Objekt angelegt, das dann mit 3 Attributen + zugehörigen Werten gefüllt wird. Die toString-Methode des JSON-Objektes wird dann in einen String gespeichert,der dann ausgegeben wird: {"frage":"Buch","fachnr":2,"antwort":"book"}
Soweit auch noch verständlich.
Im 2.Block wird ein weiteres JSON-Objekt angelegt, das mit der toString-Ausgabe des 1.JSON-Objektes gefüttert wird. Aus diesem werden dann die Objektvariablen eines Vokabel-Objektes ermittelt. Nur: wie macht Java das,d.h. woher weiß das JSON-Objekt welcher Teil dieses Strings die Attribute und Werte sind,die in die Objektvariablen des Vokabelobjektes kopieren muss ? Wenn ich mir den Konstruktor der JSON-Klasse anschaue, der ein String empfängt,so sieht der so aus:
public JSONObject(String source) throws JSONException {
this(new JSONTokener(source));
}
Wenn ich mir den Konstruktor des JSONTokener anschaue,der den String ebenfalls empfängt, dann sieht der so aus:
public JSONTokener(String s) {
this(new StringReader(s));
}
Und der Stringreader enthält das hier:
public StringReader(String s) {
this.str = s;
this.length = s.length();
}
D.h. ich sehe nirgendwo eine Stelle, wo die toString-Ausgabe des 1.JSON-Objektes analysiert wird: {"frage":"Buch","fachnr":2,"antwort":"book"}
Wie findet Java raus, welcher Teil des Strings die Werte sind, die es in das Vokabelobjekt übergeben muss ?
Kurze Anmerkung: es gibt noch eine Klasse Datum, in der ein Datum drinsteht, wann das buch zuletzt verliehen wurde. Daher stammen die Getter getTag, getMonat, getJahr.
ich habe mal wieder eine Verständnisfrage,diesmal zu JSON. Hier erstmal der Code:
Java:
package K26;
import org.json.JSONObject;
public class SimpleVokabelJson {
public static void main(String[] args) {
JSONObject jobj = new JSONObject();
jobj.put("frage", "Buch");
jobj.put("antwort", "book");
jobj.put("fachnr", new Integer(2));
String jsonString = jobj.toString();
System.out.println(jsonString);
// Ausgabe: {"frage":"Buch","fachnr":2,"antwort":"book"}
JSONObject jvok = new JSONObject(jsonString);
Vokabel vok = new Vokabel();
vok.setFrage(jvok.getString("frage"));
vok.setAntwort(jvok.getString("antwort"));
vok.setFachnr(jvok.getInt("fachnr"));
System.out.println(vok);
Java:
package K26;
import org.json.JSONObject;
public class Vokabel {
private String antwort;
private int fachnr = 1;
private String frage;
private Datum zuletzt = new Datum();
public Vokabel() {
}
public Vokabel(JSONObject obj) {
this.frage = obj.getString("frage");
this.antwort = obj.getString("antwort");
this.fachnr = obj.getInt("fachnr");
this.zuletzt = new Datum((JSONObject) obj.get("zuletzt"));
}
public String getAntwort() {
return antwort;
}
public int getFachnr() {
return fachnr;
}
public String getFrage() {
return frage;
}
public Datum getZuletzt() {
return zuletzt;
}
public void setAntwort(String antwort) {
this.antwort = antwort;
}
public void setFachnr(int fachnr) {
this.fachnr = fachnr;
}
public void setFrage(String frage) {
this.frage = frage;
}
public void setZuletzt(Datum zuletzt) {
this.zuletzt = zuletzt;
}
@Override
public String toString() {
return frage + "/" + antwort + "(" + fachnr + ")" + "[" + zuletzt.getTag() + "." + zuletzt.getMonat() + "."
+ zuletzt.getJahr() + "]";
}
}
Wie man sieht, wird ein JSON-Objekt angelegt, das dann mit 3 Attributen + zugehörigen Werten gefüllt wird. Die toString-Methode des JSON-Objektes wird dann in einen String gespeichert,der dann ausgegeben wird: {"frage":"Buch","fachnr":2,"antwort":"book"}
Soweit auch noch verständlich.
Im 2.Block wird ein weiteres JSON-Objekt angelegt, das mit der toString-Ausgabe des 1.JSON-Objektes gefüttert wird. Aus diesem werden dann die Objektvariablen eines Vokabel-Objektes ermittelt. Nur: wie macht Java das,d.h. woher weiß das JSON-Objekt welcher Teil dieses Strings die Attribute und Werte sind,die in die Objektvariablen des Vokabelobjektes kopieren muss ? Wenn ich mir den Konstruktor der JSON-Klasse anschaue, der ein String empfängt,so sieht der so aus:
public JSONObject(String source) throws JSONException {
this(new JSONTokener(source));
}
Wenn ich mir den Konstruktor des JSONTokener anschaue,der den String ebenfalls empfängt, dann sieht der so aus:
public JSONTokener(String s) {
this(new StringReader(s));
}
Und der Stringreader enthält das hier:
public StringReader(String s) {
this.str = s;
this.length = s.length();
}
D.h. ich sehe nirgendwo eine Stelle, wo die toString-Ausgabe des 1.JSON-Objektes analysiert wird: {"frage":"Buch","fachnr":2,"antwort":"book"}
Wie findet Java raus, welcher Teil des Strings die Werte sind, die es in das Vokabelobjekt übergeben muss ?
Kurze Anmerkung: es gibt noch eine Klasse Datum, in der ein Datum drinsteht, wann das buch zuletzt verliehen wurde. Daher stammen die Getter getTag, getMonat, getJahr.