Разобрать JSON, который может или не может вернуть массив?

Я получаю JSON со стороннего веб-сайта (использование электроэнергии в домашних условиях), и в зависимости от того, что я запросил с сайта, возвращаемый JSON может быть или не быть массивом. Например, если я запрашиваю список своих интеллектуальных счетчиков, я получаю это (результаты обрезаны из-за большого размера):

{"gwrcmds":{"gwrcmd":{"gcmd":"SPA_UserGetSmartMeterList","gdata":{"gip":{"version":"1"...

кудаgwrcmd это один элемент.

Но если я запрашиваю потребление электроэнергии за последние полчаса, я получаю это:

{"gwrcmds":{"gwrcmd":[{"gcmd":"DeviceGetChart","gdata":{"gip":{"version":"1" ...

Смотри какgwrcmd сейчас массив?

В моем приложении Go, у меня есть структура, которая выглядит следующим образом (опять же, усеченная, как это продолжается некоторое время. Есть больше подструктур и свойств под «Версией»:

type Response struct {
    Gwrcmds struct {
        Gwrcmd struct {
            Gcmd  string
            Gdata struct {
                Gip struct {
                    Version string

Еслиgwrcmd это массив,Gwrcmd должен быть[]struct { }, но если это не так, это просто обычный старыйstruct { }

Проблема в том, чтоjson.Unmarshal просто возвращает ошибку, если JSON имеет массив, а структура не имеет среза (или наоборот).

Нужно ли мне создать вторую структуру, которая дублирует первую (кроме[]struct { } вместо этого), или есть лучший способ сделать это? Я думал о чем-то с интерфейсами, но я еще не особо их коснулся, поэтому я не уверен на 100% в них.

Ответы на вопрос(2)

Ваш ответ на вопрос