Разобрать 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% в них.