# 与 JSON / Form 数据交互

URL: https://caijiao.org/ky/json-form
Source: docs/ky/json-form.md
Description: 学习如何使用 Ky 发送和接收 JSON 与 Form 数据，处理请求体和响应解析。

Ky 对 JSON 和 Form 数据的处理非常简便，本章节讲解如何发送 JSON、FormData 请求以及接收响应数据。

## 发送 JSON 数据

使用 `json` 选项发送 JSON 数据：

```javascript
import ky from 'ky';

async function createUser() {
  const data = await ky.post('https://api.example.com/users', {
    json: { name: 'Alice', age: 25 }
  }).json();

  console.log('返回数据:', data);
}

createUser();
````

* Ky 会自动设置 `Content-Type: application/json`。
* 响应可直接使用 `.json()` 解析为对象。

## 发送表单数据

使用 `FormData` 或 `application/x-www-form-urlencoded`：

### FormData 示例

```javascript
const formData = new FormData();
formData.append('username', 'Alice');
formData.append('avatar', fileInput.files[0]);

await ky.post('https://api.example.com/users', { body: formData });
```

### URL-encoded 示例

```javascript
import ky from 'ky';

const params = new URLSearchParams();
params.append('username', 'Alice');
params.append('age', '25');

await ky.post('https://api.example.com/users', {
  body: params
});
```

* 使用 `URLSearchParams` 时，Ky 自动设置 `Content-Type: application/x-www-form-urlencoded`。

## 接收 JSON / 文本 / 二进制数据

* `.json()` → JSON 数据
* `.text()` → 文本
* `.blob()` → 二进制文件
* `.arrayBuffer()` → 原始二进制数据

```javascript
const data = await ky.get('https://api.example.com/info').json();
console.log(data);
```

## 小结

* Ky 对 JSON 和 Form 数据支持良好，发送请求简洁。
* 响应解析可根据需求选择 `.json()`、`.text()`、`.blob()` 等方法。
* 结合 Ky 的实例和全局配置，可统一管理请求体格式和解析方式。
