Имам .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
}
}