This recipe demonstrates how to use struct to encode to json data.
The struct type and its attributes have to be exportable in order for json encoding. The json data uses the attributes of struct type as keys if there is no customize key name defined.
package main
import (
"encoding/json"
"fmt"
"log"
)
// Switch ...
type Switch struct {
// `json:"hostname"` for example is to customize the name of the key in json data.
Hostname string `json:"hostname"`
IPAddr string `json:"ip"`
Vlan []uint `json:"vlans"`
Intf []string `json:"interfaces"`
}
func main() {
sw1 := Switch{
Hostname: "sw1",
IPAddr: "192.168.1.10",
Vlan: []uint{
10, // frontend office
20, // backend office
30, // customer service office
40, // server
999, // isolated vlan
},
Intf: []string{
"Ethernet0/0",
"Ethernet0/1",
"Ethernet0/2",
"Ethernet0/3",
"Ethernet0/4",
"Ethernet1/0",
"Ethernet1/1",
"Ethernet1/2",
"Ethernet1/3",
"Ethernet1/4",
},
}
// jsonData, err := json.Marshal(sw1)
// Encode to json, json.MarshalIndent() is to make printing pretty.
jsonData, err := json.MarshalIndent(sw1, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonData))
}