1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

парсинг объекта в JsonObject (Bukkit)

Тема в разделе "Разработка плагинов для новичков", создана пользователем sweettie, 30 июн 2021.

Метки:
Статус темы:
Закрыта.
  1. Автор темы
    sweettie

    sweettie Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    Решил значит сделать один свой небольшой плагин, и столкнулся с проблемой. У меня есть объект User в котором храниться Player и лист ещё одних объектов Stash. Мне надо парсить в json объект User, но вот проблема, я не понимаю как:(. Объясните пожалуйста

    User:
    upload_2021-6-30_19-47-20.png

    Stash:
    upload_2021-6-30_19-48-8.png
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Player это не pojo класс, это интерфейс, тебе нужно зарегистрировать сериализатор для него и реализовать.
     
  3. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    JsonSerializer & JsonDeserializer
     
  4. ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    gson, который уже имеется в ядре

    new Gson().toJson(object)

    Вместо Player, в таком случае, лучше хранить его UUID.


    тебе ide намекает, что ты лишний раз создаешь лист при инициализации переменной stashlist, когда в конструкторе передаешь уже другой готовый лист
     
  5. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Я думаю, что лучше сделать так:
    PHP:
    public class User {

        private final 
    Player player;
        private final List<
    Stashstashes = new ArrayList<>();

        public 
    User(Player player, List<Stashstashes) {
            
    this.player player;
            if (
    stashes != nullthis.stashes.addAll(stashes);
        }
     
    }
    А еще я бы переопределил методы equals & hashCode у юзера и стеша + заменил бы коллекцию на HashSet, чтобы стеши были уникальны и не повторялись. И так же стоит заменить игрока на UUID, как посоветовал BukkitProfi, либо сделать два поля UUID и Player, где UUID != null, а игрок уже может быть хоть null
     
    Последнее редактирование: 30 июн 2021
  6. ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    зачем лишний раз создавать лист, когда можно присвоить уже имеющийся?


    Код:
    public class User {
        private final UUID uniqueId;
        private final Map<Integer, Stash> stashes;
     
       public User(UUID uniquieId, Map<Integer, Stash> stashes) {
           this.uniquieId = uniquieId;
           this.stashes = stashes;
        }
    
        public Stash getStash(int id) {
            return stashes.get(id);
        }
       
        public void addStash(Stash stash) {
            stashes.put(stash.getId(), stash);
        }
    
    // etc
    }
    
     
  7. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Если не влом каждый раз проверять список на null - делай по своему
     
  8. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    И какой толк инициализации поля stashes в твоем случае, если в конструкторе ты его присваиваешь к другой мапе?)
     
  9. ВukkitPrоfi

    ВukkitPrоfi Активный участник Пользователь

    Баллы:
    76
    на нулл проверяешь при загрузке. а gson не выдаст нулл, если загружаешь сохраненную структуру объекта.

    на автоматизме написал, поправил.
     
    Последнее редактирование: 30 июн 2021
  10. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    При ручной десериализации еще как выдаст, но это будет уже JsonNull
     
  11. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Лично для меня мой вариант куда практичнее. По крайней мере ты будешь всегда уверен, что список/мапа у тебя никогда не будет равна null
     
    Последнее редактирование: 30 июн 2021
  12. Автор темы
    sweettie

    sweettie Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    _Sweettie_
    Тема закрыта, всем спасибо
     
Статус темы:
Закрыта.

Поделиться этой страницей