第 5 章 · Web 开发 · 第 5.2 课
JSON 与接口
JSON 是前后端、服务和服务之间交换数据最常用的格式。PHP 的数组和 JSON 可以直接互相转换:
json_encode($data):PHP 数组 / 对象 → JSON 字符串json_decode($json, true):JSON 字符串 → PHP 关联数组(第二个参数不写 true 会得到对象)
默认情况下中文会被转成 \u4e2d 这样的形式,加上 JSON_UNESCAPED_UNICODE 就能原样输出;JSON_PRETTY_PRINT 会加上缩进和换行,方便阅读。
写一个 JSON 接口
一个返回 JSON 的 PHP 接口通常长这样:先声明返回内容的类型,校验参数,出错时设置合适的 HTTP 状态码。前端用 fetch('/api/article.php?id=1') 就能拿到数据。
<?php
header('Content-Type: application/json; charset=utf-8');
$id = (int) ($_GET['id'] ?? 0);
if ($id <= 0) {
http_response_code(400);
echo json_encode(['ok' => false, 'error' => 'id 无效'], JSON_UNESCAPED_UNICODE);
exit;
}
echo json_encode(['ok' => true, 'data' => ['id' => $id, 'title' => '示例文章']], JSON_UNESCAPED_UNICODE);这个网站保存学习进度用的就是这样的接口。
选择题
json_decode('{"a":1}') 不传第二个参数,得到的是什么?
练习 1
订单总价
已通过$json 是一个订单里的商品列表。解析它,计算总价(单价 × 数量,再加起来),输出:
总价:22练习 2
统一的接口返回格式
已通过写函数 apiResponse(bool $ok, $data = null, string $error = ''): string,返回 JSON 字符串,中文不要转义:
- 成功时:
{"ok":true,"data":...} - 失败时:
{"ok":false,"error":"..."}
apiResponse(true, ['id' => 1]); // {"ok":true,"data":{"id":1}}
apiResponse(false, null, '没找到'); // {"ok":false,"error":"没找到"}