Hallo,
Ich speichere eine Instanz einer Klasse in ein json file und lade dieses bei erneuten Start wieder.
Aber ich erhalte immer den Fehler:
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 3 column 6 path $.loadingBays.
Der Anfang der json Datei:
Ich denk es die HashMap .. Anleitungen habe ich nur gefunden, wenn ich diese direkt serialisieren würde.
[CODE lang="java" title="Aufruf des ladens"] LocalDate date = LocalDate.now();
String path = "loadingSlots" + "[" + date.getMonthValue() + "-" + date.getYear() + "]";
loadingSlotMain = (LoadingSlotMain) readJson(loadingSlotMain, path);[/CODE]
[CODE lang="java" title="Json laden"] private Object readJson(Object o, String name) {
File file = new File(SYSTEMPATH + "\\" + name + ".json");
Reader reader = null;
Object obj = null;
try {
if (file.exists()) {
reader = new FileReader(file);
if (name.startsWith("loadingSlots")) {
// Type typeOfHashMap = new TypeToken<HashMap<LocalDate, LoadingSlots>>() {
// }.getType();
obj = gson.fromJson(reader, o.getClass());
} else {
obj = gson.fromJson(reader, o.getClass());
}
reader.close();
} else {
logger.error(name + " not found");
}
} catch (FileNotFoundException e) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
logger.error("Error " + e.getMessage() + " in 'readJson'");
} catch (IOException e) {
e.printStackTrace();
}
return obj;[/CODE]
Der Fehler kommt bei Zeile 11: obj = gson.fromJson(reader, o.getClass());
[CODE lang="java" title="class LoadingSlotMain"]public class LoadingSlotMain {
private transient Logger logger = (Logger) LoggerFactory.getLogger(this.getClass());
public static final long NEXT_TRUCK_DELAY = 30000; // ms
private static int MAX_SLOTS;
private static int PAGER_AMOUNT;
public transient Date[] lastTruckRequestBay;
public HashMap<LocalDate, LoadingSlots> loadingBays = new HashMap<LocalDate, LoadingSlots>();
public transient Pagers pagers = new Pagers(PAGER_AMOUNT);
...[/CODE]
Ich speichere eine Instanz einer Klasse in ein json file und lade dieses bei erneuten Start wieder.
Aber ich erhalte immer den Fehler:
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 3 column 6 path $.loadingBays.
Der Anfang der json Datei:
JSON:
{
"loadingBays": {
"2021-02-24": {
"bay": [
{
"finishedTransportOrders": [],
"waitingTransportOrders": [
.......
Ich denk es die HashMap .. Anleitungen habe ich nur gefunden, wenn ich diese direkt serialisieren würde.
[CODE lang="java" title="Aufruf des ladens"] LocalDate date = LocalDate.now();
String path = "loadingSlots" + "[" + date.getMonthValue() + "-" + date.getYear() + "]";
loadingSlotMain = (LoadingSlotMain) readJson(loadingSlotMain, path);[/CODE]
[CODE lang="java" title="Json laden"] private Object readJson(Object o, String name) {
File file = new File(SYSTEMPATH + "\\" + name + ".json");
Reader reader = null;
Object obj = null;
try {
if (file.exists()) {
reader = new FileReader(file);
if (name.startsWith("loadingSlots")) {
// Type typeOfHashMap = new TypeToken<HashMap<LocalDate, LoadingSlots>>() {
// }.getType();
obj = gson.fromJson(reader, o.getClass());
} else {
obj = gson.fromJson(reader, o.getClass());
}
reader.close();
} else {
logger.error(name + " not found");
}
} catch (FileNotFoundException e) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
logger.error("Error " + e.getMessage() + " in 'readJson'");
} catch (IOException e) {
e.printStackTrace();
}
return obj;[/CODE]
Der Fehler kommt bei Zeile 11: obj = gson.fromJson(reader, o.getClass());
[CODE lang="java" title="class LoadingSlotMain"]public class LoadingSlotMain {
private transient Logger logger = (Logger) LoggerFactory.getLogger(this.getClass());
public static final long NEXT_TRUCK_DELAY = 30000; // ms
private static int MAX_SLOTS;
private static int PAGER_AMOUNT;
public transient Date[] lastTruckRequestBay;
public HashMap<LocalDate, LoadingSlots> loadingBays = new HashMap<LocalDate, LoadingSlots>();
public transient Pagers pagers = new Pagers(PAGER_AMOUNT);
...[/CODE]