/ / Получаване на Hashtable от Gson - java, libgdx, gson

Получаване на Hashtable от Gson - java, libgdx, gson

Имам .json файл, който съхранява стойността на hashtable

{FISH: {клас: java.lang.Integer, стойност: 7}, яйца: {клас: java.lang.Integer, стойност: 6}, пиле: {клас: java.lang.Integer, стойност: 7}}

Запазвам таблицата без проблем:

private void saveInventory()
{
Json json = new Json();
file.writeString(json.prettyPrint(inventory.inv), false);
}

Опитвам се да заредя тази таблица с помощта на Gson.

Опитах няколко различни начина, въз основа наняколко други въпроса тук. Всяка от тях е давала различни грешки, неправилна версия на JsonException, понастоящем има по-долу и ми дава грешка: java.lang.IllegalStateException: Очаквана STRING, но BEGIN_OBJECT

private void loadInventory() {
Json json = new Json();
Gson gson = new Gson();

try {
BufferedReader br = new BufferedReader(new FileReader("bin/data.json"));
JsonObject object = (JsonObject) new com.google.gson.JsonParser().parse(br);
Set<Map.Entry<String, JsonElement>> set = object.entrySet();
Iterator<Map.Entry<String, JsonElement>> iterator = set.iterator();

Hashtable<Constants.FoodTypes, Integer> map = new Hashtable<Constants.FoodTypes, Integer>();

while (iterator.hasNext()) {
Map.Entry<String, JsonElement> entry = iterator.next();

Constants.FoodTypes value = gson.fromJson(entry.getValue(), Constants.FoodTypes.class);
Integer key = Integer.parseInt(entry.getKey());

if (value != null) {
map.put(value, key);
}

}

}
catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
}

Какъв е по-добрият начин да заредите това обратно като hashtable?

Отговори:

1 за отговор № 1

"{FISH: {клас: java.lang.Цяло число, стойност: 7}, яйца: {клас: java.lang.Integer, стойност: 6}, пиле: {клас: java.lang.Integer, стойност: 7}} " не е правилен JSON обект. Можете да създадете файла (или низ), като използвате Gson, за да го генерирате от hashtable.

В този случай вашият json низ трябва да бъде

{
"FISH": {
"class": "java.lang.Integer",
"value": 7
},
"EGGS": {
"class": "java.lang.Integer",
"value": 6
},
"CHICKEN": {
"class": "java.lang.Integer",
"value": 7
}
}