Если вам нужно, чтобы данные сохранялись в словаре, достаточно использовать комбинацию среза и map[string]interface{}
.
В этом примере ниже я создал новый тип с именем Dictionary
, чтобы избежатьнаписание слишком большого числа синтаксисов map[string]interface{}
для составных литералов.
type Dictionary map[string]interface{}
data := []Dictionary{
{
"metrics": []Dictionary{
{ "tag_name": "output_current", "id": 3 },
{ "tag_name": "input_voltage", "id": 2 },
},
"port": 161,
"timeout": 1,
"sleep_time": 5,
},
{
"metrics": []Dictionary{
{ "tag_name": "destructor", "id": 10 },
},
"port": 161,
"timeout": 1,
"sleep_time": 4,
},
}
Но я предлагаю, если ваша структура данных является фиксированной, вместо этого определите структуру.Ниже приведен еще один пример использования того же набора данных, но в объекте struct:
type Metric struct {
TagName string `json:"tag_name"`
ID int `json:"id"`
}
type Data struct {
Port int `json:"port"`
Timeout int `json:"timeout"`
SleepTime int `json:"sleep_time"`
Metrics []Metric `json:"metrics"`
}
data := []Data{
Data{
Port: 161,
Timeout: 1,
SleepTime: 5,
Metrics: []Metric{
Metric{TagName: "output_current", ID: 3},
Metric{TagName: "input_voltage", ID: 2},
},
},
Data{
Port: 161,
Timeout: 1,
SleepTime: 4,
Metrics: []Metric{
Metric{TagName: "destructor", ID: 10},
},
},
}
Обновление 1
Чтобы иметь возможность записать data
в файл json, data
нужно сначала преобразовать в строку json.Используйте json.Marshal()
для преобразования map
данных (или данных структурных объектов) в строку json типа []byte
.
buf, err := json.Marshal(data)
if err !=nil {
panic(err)
}
err = ioutil.WriteFile("fileame.json", buf, 0644)
if err !=nil {
panic(err)
}
Затем введите ioutil.WriteFile()
для записи в файл.
Если вам как-то нужно напечатать строку json, сначала приведите buf
к типу string
.
jsonString := string(buf)
fmt.Println(jsonString)
Приведенные выше выражения приведут к выводу ниже:
[{"port":161,"timeout":1,"sleep_time":5,"metrics":[{"tag_name":"output_current","id":"3"},{"tag_name":"input_voltage","id":"2"}]},{"port":161,"timeout":1,"sleep_time":4,"metrics":[{"tag_name":"destructor","id":"10"}]}]