# JSON 编解码与发送请求

URL: https://caijiao.org/go/06-web/07-json-client
Source: docs/go/06-web/07-json-client.md
Description: 本节介绍 Go 语言中 JSON 编解码及通过 HTTP 发送 JSON 请求的实用方法。

## 1. JSON 编码（Marshal）

将 Go 结构体编码为 JSON 字符串：

```go
type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

user := User{Name: "Alice", Age: 30}
jsonData, err := json.Marshal(user)
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(jsonData))
````

## 2. JSON 解码（Unmarshal）

将 JSON 字符串解码为 Go 结构体：

```go
var user User
err := json.Unmarshal(jsonData, &user)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%+v\n", user)
```

## 3. 发送 JSON 请求

通过 `http.Post` 发送 JSON 数据：

```go
resp, err := http.Post("https://api.example.com/users", "application/json", bytes.NewBuffer(jsonData))
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(body))
```

---

JSON 是 Web 数据交换的重要格式，Go 提供了强大的支持。
