Я сделал это сам и использую для этого JsonObject.Мои тесты сработали, и я надеюсь, что не найду никакой ошибки.Поскольку я хочу управлять некоторыми настройками, мой начальный JsonObject называется «настройки».
JsonObject settings;
JsonObject defaultSettings;
static JsonElement getSetting(String key){
String[] args = key.split("\\.");
JsonObject curr = settings;
for(int i = 0; i < args.length - 1; i++){
curr = curr.getAsJsonObject(args[i]);
}
if(curr.has(args[args.length - 1]))
return curr.get(args[args.length - 1]);
else
return getGuildSetting(gId, key, defaultSettings);
}
static JsonElement getSetting(String key, JsonObject jsonObject){
String[] args = key.split("\\.");
JsonObject curr = jsonObject;
for(int i = 0; i < args.length - 1; i++){
curr = curr.getAsJsonObject(args[i]);
}
return curr.get(args[args.length - 1]);
}
static void setSetting(String key, Object val){
String[] args = key.split("\\.");
JsonElement emptyElement = new Gson().fromJson("{}", JsonElement.class);
JsonObject curr = settings;
for(int i = 0; i < args.length - 1; i++){
if(!curr.keySet().contains(args[i])) curr.add(args[i], emptyElement);
curr = curr.getAsJsonObject(args[i]);
}
curr.add(args[args.length - 1], new Gson().toJsonTree(val));
}
Возможно, есть лучший способ проверить, является ли это число, но кажется, что целое число не являетсячисло ... И я попытался преобразовать сам объект в JsonElement, но это не сработало.Таким образом, вы можете использовать только числа, логические значения, строки и символы, потому что эти функции JsonObject позволяет вам использовать.
РЕДАКТИРОВАТЬ: хорошо, я тупой.Вместо использования val.getClass () == Number.class и т. Д. Я могу использовать val instanceof Number, и это верно для всех видов чисел.Вот почему я изменил код.
РЕДАКТИРОВАТЬ 2: хорошо, я действительно тупой.есть функция, которая использует только объект и ничего более ...