如果您需要将数据存储在基于字典/键值的切片格式中,那么可以使用slice和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,
},
}
map
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字符串格式(in []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数据打印为字符串,则将
bufstring
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"}]}]