Массив struct / map без ключей - PullRequest
0 голосов
/ 28 марта 2020

Добро пожаловать всем. Подскажите, как получить плоский массив в GO. То есть, условно, у меня есть структура без ключей вида:

type DashboardHeatMapStruct struct {
    float64
    string
}

Далее я даю ее в ответ на остальные в виде JSON и получаю вывод в виде:

[[0,"#AEAEAE"],[0.01,"#0e00ff"],[0.65,"#00ffcf"],[0.7,"#00ffcf"],[0.75,"#00ff9c"],[0.8,"#00ff0a"],[0.85,"#b3ff00"],[0.9,"#ffdc00"],[0.95,"#ff6d00"],[1,"#c60000"]]

1 Ответ

1 голос
/ 28 марта 2020

Объявление типа структуры для представления элементов массива JSON.

type DashboardHeatMapStruct struct {
    t float64
    c string
}

Реализация интерфейса json .Unmarshaler для этого типа:

func (d *DashboardHeatMapStruct) UnmarshalJSON(p []byte) error {
    // p is expected to be JSON array with float and 
    // string values. Create slice to match.
    v := []interface{}{&d.t, &d.c}

    // Unmarshal to JSON array to the slice. The JSON decoder
    // follows the pointers in the slice to set the struct members.
    return json.Unmarshal(p, &v)
}

Реализация интерфейса json .Marshler закодировать обратно в JSON.

func (d DashboardHeatMapStruct) MarshalJSON() ([]byte, error) {
    v := []interface{}{d.t, d.c}
    return json.Marshal(v)
}

Разбить фрагмент DashboardHeatMapStruct:

var result []DashboardHeatMapStruct
if err := json.Unmarshal(data, &result); err != nil {
    // handle error
}

Запустить его на детской площадке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...