JSON是一种常用的数据交换格式,它是轻量级的、易于阅读和编写的,可以方便的用于不同语言之间的数据传输和交换。在使用JSON的过程中,我们经常需要将数据打包成结构体数组,以便于传输和处理。
如下展示了一个结构体数组:
type Employee struct {
Name string
Age int
Salary float64
}
employees := []Employee {
Employee{"Tom", 29, 8000.0},
Employee{"John", 35, 10000.0},
Employee{"Bob", 27, 6000.0},
}
将上述结构体数组打包成JSON格式数据可以通过json.Marshal()函数来实现:
import "encoding/json"
jsonBytes, err := json.Marshal(employees)
if err != nil {
fmt.Errorf("Error: %s", err)
}
打包后的JSON格式数据如下所示:
[
{
"Name": "Tom",
"Age": 29,
"Salary": 8000.0
},
{
"Name": "John",
"Age": 35,
"Salary": 10000.0
},
{
"Name": "Bob",
"Age": 27,
"Salary": 6000.0
}
]
在验证JSON数据时,可以通过json.Unmarshal()函数将JSON数据解码成结构体数组:
decodedEmployees := []Employee{}
err = json.Unmarshal(jsonBytes, &decodedEmployees)
if err != nil {
fmt.Errorf("Error: %s", err)
}
打包和解包过程中,需要注意JSON数据和结构体数组字段名的对应关系。可以使用tag标签来指定JSON数据中的字段名和结构体数组中的字段名的对应关系:
type Employee struct {
Name string `json:"name"`
Age int `json:"age"`
Salary float64 `json:"salary"`
}
当打包和解包时遇到标签时,会自动进行对应关系的处理。