发布时间:2024-11-21 21:20:57
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它以人类可读的形式存储和传输数据。在Golang中,我们可以使用标准库中的encoding/json来构建和解析JSON。
Golang提供了一个结构体标记的方式来构建JSON。通过在结构体字段上添加`json`的标记,我们可以指定字段的名称、类型和其他属性。
下面是一个示例结构体和相应的JSON构建代码:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email,omitempty"`
}
func main() {
p := Person{
Name: "John Doe",
Age: 30,
}
b, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b))
}
在上面的示例中,我们定义了一个名为`Person`的结构体,有三个字段:Name、Age和Email。在每个字段的后面,我们添加了`json`标记来指定字段在JSON中的名称。
除了构建JSON之外,我们还可以使用Golang来解析已存在的JSON。`encoding/json`提供了`json.Unmarshal`函数来解析JSON字符串,并将解析结果存储到对应的结构体中。
下面是一个示例代码:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email,omitempty"`
}
func main() {
jsonStr := `{"name":"John Doe","age":30}`
var p Person
err := json.Unmarshal([]byte(jsonStr), &p)
if err != nil {
log.Fatal(err)
}
fmt.Println(p.Name, p.Age)
}
在上面的示例中,我们定义了一个名为`Person`的结构体,并定义一个JSON字符串。然后,我们使用`json.Unmarshal`函数将JSON字符串解析成对应的结构体。
在实际开发中,我们经常会遇到复杂的JSON结构,例如嵌套的结构体、切片、Map等。Golang中,我们可以使用相同的方式来构建和解析这些复杂的JSON。
下面是一个示例代码:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Addresses []Address `json:"addresses"`
}
type Address struct {
Street string `json:"street"`
City string `json:"city"`
}
func main() {
p := Person{
Name: "John Doe",
Age: 30,
Addresses: []Address{
{Street: "123 Main St", City: "New York"},
{Street: "456 Elm St", City: "Los Angeles"},
},
}
b, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(b))
}
在上面的示例中,我们定义了一个名为`Person`的结构体和一个名为`Address`的嵌套结构体,`Person`结构体包含一个`Addresses`字段,它是一个`Address`类型的切片。我们可以通过将对应的JSON标记添加到结构体字段上来构建和解析这个复杂的JSON。
通过Golang的encoding/json包,我们可以轻松地构建和解析JSON。无论是简单的JSON还是复杂的JSON结构,Golang都有强大的工具来处理它们。