На каждый тип есть строгая нагрузка, ключи и их значения всегда строго одного типа
вариантов 4 (на самом деле - 3, третий вариация второго)
1. делаете универсальную структуру, в которую можно анмаршалить любой из ваших типов. не подойдет, если имена полей разных типов пересекаются
2. делаете минимальный тип, чтобы понять, что у вас там внутри, и соответствующие типы для каждого варианта. соответствующие типы надо сделать одним интерфейсом, и это может быть confusing
3. делаете кастомный тип, который внутри себя уже содержит соответствующие типы, и кастомный анмаршалер, который сначала смотрит внутрь массива байт, а потом анмаршалит куда надо
4. анмаршалите в переменную типа interface{}
, и разбираете, что там у вас, в чистой динамике
но самый правильный вариант - отказаться от такого упоротого api