- Forum-Beiträge: 770
04.05.2016, 07:13:15 via Website
04.05.2016 07:13:15 via Website
Hallo,
aus einer vorher geschriebenen JSON-Datei möchte ich die darin gespeicherten Objekte wieder lesen. Ein solches Objekt sieht (abgesehen von den Getter- und Setter-Methoden) so aus:
public class cDevice {
public cDevice(int deviceTypeSelector, String cubeCubeName, String cubeCubeRFAddress, String cubeCubeSerialNumber, String raumName, int raumNameLaenge, byte raumID, String raumRFAdresse, String deviceRFAddress, int deviceType, String deviceName, String deviceSeriennummer, int deviceRoomID) {
DeviceTypeSelector = deviceTypeSelector;
CubeCubeName = cubeCubeName;
CubeCubeRFAddress = cubeCubeRFAddress;
CubeCubeSerialNumber = cubeCubeSerialNumber;
RaumName = raumName;
RaumNameLaenge = raumNameLaenge;
RaumID = raumID;
RaumRFAdresse = raumRFAdresse;
DeviceRFAddress = deviceRFAddress;
DeviceType = deviceType;
DeviceName = deviceName;
DeviceSeriennummer = deviceSeriennummer;
DeviceRoomID = deviceRoomID;
}
Hinweis: Doppelt/ähnlich aussehende Properties sind Absicht und im Moment auch nicht das Problem
Die Arraylist, wo die gelesenen Objekte wieder rein müssen, sieht so aus:
ArrayList<cDevice> CubeNetz = new ArrayList();
In die JSON-Datei geschrieben wird das ganze über:
// Jetzt das ganze speichern (als JSONArray)
JSONArray CubeNetzwerk = new JSONArray();
for (int DevicesCounter = 0; DevicesCounter < CubeNetz.size(); DevicesCounter++) {
cDevice AktDevice = new cDevice(0,"","","","",0,Byte.decode("0"),"","",0,"","",0);
AktDevice = CubeNetz.get(DevicesCounter);
CubeNetzwerk.put(AktDevice.DeviceToJson());
}
FileWriter JsonDatei = new FileWriter(VerwaltungXmlDatei);
JsonDatei.write(CubeNetzwerk.toString());
JsonDatei.flush();
Die Methode A
ktDevice.DeviceToJson()sieht so aus:
public JSONObject DeviceToJson() {
JSONObject devobj = new JSONObject();
try {
devobj.put("DeviceTypeSelector",DeviceTypeSelector);
devobj.put("CubeCubeName",CubeCubeName);
devobj.put("CubeCubeRFAddress",CubeCubeRFAddress);
devobj.put("CubeCubeSerialNumber",CubeCubeSerialNumber);
devobj.put("RaumName",RaumName);
devobj.put("RaumNameLaenge",RaumNameLaenge);
devobj.put("RaumID",RaumID);
devobj.put("RaumRFAdresse",RaumRFAdresse);
devobj.put("DeviceRFAddress",DeviceRFAddress);
devobj.put("DeviceType",DeviceType);
devobj.put("DeviceName",DeviceName);
devobj.put("DeviceSeriennummer",DeviceSeriennummer);
devobj.put("DeviceRoomID",DeviceRoomID);
} catch (JSONException e) {
e.printStackTrace();
}
return devobj;
}
Hinweise: Die dazugehörigen Exceptions werden abgefangen (hier aber für's Problem nicht wichtig)
Das die Datei noch VerwaltungXmlDatei heißt, ist nicht entscheidend, da sie nicht als XML-gespeichert oder interpretiert wird
Zum Lesen hab ich bisher dies hier:
(in der class c
Device(testweise erstmal nur ein einziges Element))
public cDevice JsonToDevice(JSONObject DeviceAsJson) {
cDevice dev = new cDevice(0,"","","","",0,Byte.decode("0"),"","",0,"","",0);
try {
dev.setDeviceTypeSelector(DeviceAsJson.getInt("DeviceTypeSelector"));
} catch (JSONException e) {
e.printStackTrace();
}
return dev;
}
Und da wo wirklich gelesen wird:
public void readDevicesListFromJson(File VerwaltungXmlDatei) {
String JSonZeile = new String();
FileReader frjson = null;
try {
frjson = new FileReader(VerwaltungXmlDatei);
BufferedReader br = new BufferedReader(frjson);
String jsonZeile = "";
while ((jsonZeile = br.readLine()) != null) {
JSONArray ja = new JSONArray(jsonZeile);
for (int i = 0; i < ja.length(); i++) {
cDevice jo = (cDevice) ja.get(i);
CubeNetz.add(jo.JsonToDevice()); // <<== Wie geht's hier weiter???
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Mein Problem (und damit die Stelle, wo ich das Brett vorm Kopf hab) ist die markierte Zeile. Geh ich da falsch vor? oder wie muss das angepasst werden, damit's funktioniert?
Da vor ein paar Tagen auf eine ähnliche Frage von mir der Hinweis auf Gson gekommen ist - bitte nicht vorschlagen. Ich möchte es mit den direkten JSON-Klassen lösen - das muss gehen.
Vielen Dank schon mal und Gruss
G.-U.M.
PS: Für den Fall, dass es wichtig ist, hier noch die erzeugte JSON-Datei (ist nicht soo lang):
[{"RaumName":"","DeviceTypeSelector":0,"RaumNameLaenge":0,"DeviceName":"","DeviceRFAddress":"","RaumID":0,"CubeCubeRFAddress":"0cd86d","DeviceRoomID":0,"CubeCubeName":"","CubeCubeSerialNumber":"EQ0837268","DeviceSeriennummer":"","DeviceType":0,"RaumRFAdresse":""},{"RaumName":"Wohnzimmer","DeviceTypeSelector":1,"RaumNameLaenge":10,"DeviceName":"","DeviceRFAddress":"","RaumID":1,"CubeCubeRFAddress":"","DeviceRoomID":0,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"","DeviceType":0,"RaumRFAdresse":"\u000bqᆭ"},{"RaumName":"Schlafzimmer","DeviceTypeSelector":1,"RaumNameLaenge":12,"DeviceName":"","DeviceRFAddress":"","RaumID":2,"CubeCubeRFAddress":"","DeviceRoomID":0,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"","DeviceType":0,"RaumRFAdresse":"\u000bニ@"},{"RaumName":"Bᅢᄐro","DeviceTypeSelector":1,"RaumNameLaenge":5,"DeviceName":"","DeviceRFAddress":"","RaumID":3,"CubeCubeRFAddress":"","DeviceRoomID":0,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"","DeviceType":0,"RaumRFAdresse":"\u000bq￘"},{"RaumName":"Badezimmer","DeviceTypeSelector":1,"RaumNameLaenge":10,"DeviceName":"","DeviceRFAddress":"","RaumID":4,"CubeCubeRFAddress":"","DeviceRoomID":0,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"","DeviceType":0,"RaumRFAdresse":"\u000bメ\u000b"},{"RaumName":"Gᅢᄂstezimmer","DeviceTypeSelector":1,"RaumNameLaenge":12,"DeviceName":"","DeviceRFAddress":"","RaumID":5,"CubeCubeRFAddress":"","DeviceRoomID":0,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"","DeviceType":0,"RaumRFAdresse":"\u000b`\/"},{"RaumName":"","DeviceTypeSelector":2,"RaumNameLaenge":0,"DeviceName":"Schlafen","DeviceRFAddress":"\u000bニ@","RaumID":0,"CubeCubeRFAddress":"","DeviceRoomID":2,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"KEQ0446747","DeviceType":1,"RaumRFAdresse":""},{"RaumName":"","DeviceTypeSelector":2,"RaumNameLaenge":0,"DeviceName":"Bᅢᄐro","DeviceRFAddress":"\u000bq￘","RaumID":0,"CubeCubeRFAddress":"","DeviceRoomID":3,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"KEQ0449549","DeviceType":1,"RaumRFAdresse":""},{"RaumName":"","DeviceTypeSelector":2,"RaumNameLaenge":0,"DeviceName":"Bad","DeviceRFAddress":"\u000bメ\u000b","RaumID":0,"CubeCubeRFAddress":"","DeviceRoomID":4,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"KEQ0446180","DeviceType":1,"RaumRFAdresse":""},{"RaumName":"","DeviceTypeSelector":2,"RaumNameLaenge":0,"DeviceName":"Wohnzimmer","DeviceRFAddress":"\u000bqᆭ","RaumID":0,"CubeCubeRFAddress":"","DeviceRoomID":1,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"KEQ0449570","DeviceType":1,"RaumRFAdresse":""},{"RaumName":"","DeviceTypeSelector":2,"RaumNameLaenge":0,"DeviceName":"Gᅢᄂstezimmer","DeviceRFAddress":"\u000b`\/","RaumID":0,"CubeCubeRFAddress":"","DeviceRoomID":5,"CubeCubeName":"","CubeCubeSerialNumber":"","DeviceSeriennummer":"KEQ0450567","DeviceType":1,"RaumRFAdresse":""}]
N'y pas n'y
tu car tu
mal tu mal
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.