# JSON 与结构体映射（encoding/json）

URL: https://caijiao.org/go/03-structured/05-json-mapping
Source: docs/go/03-structured/05-json-mapping.md
Description: 本节介绍 Go 语言中 JSON 与结构体的映射关系，讲解如何进行 JSON 编码和解码。

Go 标准库提供 `encoding/json` 包，用于 JSON 数据与结构体的转换。

## 1. 结构体标签

使用 `json` 标签指定字段对应的 JSON 键名：

```go
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
````

## 2. JSON 编码（序列化）

将结构体转为 JSON 字符串：

```go
import "encoding/json"

p := Person{Name: "Alice", Age: 30}
data, err := json.Marshal(p)
if err != nil {
    panic(err)
}
fmt.Println(string(data))  // 输出：{"name":"Alice","age":30}
```

## 3. JSON 解码（反序列化）

将 JSON 字符串转换为结构体：

```go
var p Person
jsonStr := `{"name":"Bob","age":25}`
err := json.Unmarshal([]byte(jsonStr), &p)
if err != nil {
    panic(err)
}
fmt.Println(p.Name, p.Age)  // 输出：Bob 25
```

## 4. 忽略字段

使用 `json:"-"` 标签忽略字段：

```go
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"-"`
}
```

---

通过 JSON 与结构体的映射，实现数据交换和持久化。
