[БЕЗ_ЗВУКА] В предыдущем видео мы рассматривали упаковку и запаковку json'а на примере структуры, у которой чётко определена структура. И мы всегда её знаем. Но что делать, если мы хотим поработать с json'ом, у которого не определена структура, либо мы не знаем, либо она каждый раз меняется, а залезть нам в неё всё-таки надо. Мы тоже можем с этим работать в Go, используя стандартный пакет json, и на помощь нам придёт пустой интерфейс. Вот в коде у меня определённый json. Это массив из двух объектов в терминологии json'а. Причём объектов разных. Это не абсолютно идентичные объекты, просто с разными полями, в первом есть id, username, phone, во втором id есть, но уже поля другие: адрес и компания. Как это распаковать? Почти точно так же, как со структурой. Я создаю переменную user1, которая имеет тип «пустой интерфейс». Дальше при распаковке я ей передаю ссылку на эту переменную, говорю, что, пожалуйста, распакуй мне вот сюда. И что он мне распаковал? [ЗВУК] И распаковал мне всё это в интерфейс. Итак, у меня массив, в котором объекты и внутри объектов какие-то поля. Распаковал он мне это в слайс пустых интерфейсов. Первый объект — это map[string]interface, id — 17, username, phone. Второй объект — это тоже map[string]interface, id — 17, причём, обратите внимание, тут — это int, а тут — это строка, потому что данные внутри разные, адрес и компания. Да, вам, конечно, придётся довольно много делать преобразований интерфейсов туда-сюда для того, чтобы добраться до этих данных, но другой возможности нет. Точно так же вы можете запаковать любое значение через пустой интерфейс, да и просто без интерфейса. Например, я создал какую-то map[string]interface, там определил значение. Сейчас это user2, сейчас map[string]interface. Я могу сериализовать напрямую это значение, могу присвоить это в какое-то другое значение, которое вообще любое, то есть user2, и это пустой интерфейс. Теперь сериализую его. Что получаю? Ну и получаю нормальный валидный json, который уже может принять любая другая программа.