response.json()可自动解析JSON响应为JS对象,返回Promise需await或then处理,不可重复调用,须配合错误处理与流状态管理。

直接用 response.json() 就能将 HTTP 响应体里的 JSON 字符串自动解析为 JavaScript 对象,无需手动调用 JSON.parse()。
response.json() 的基本用法
它是一个返回 Promise 的方法,必须配合 await 或 .then() 使用。浏览器和 Node.js(如使用 node-fetch)都支持。
- 确保响应头中
Content-Type是application/json(不是必须,但推荐) - 响应体内容必须是合法的 JSON 格式,否则会抛出语法错误
- 不能重复调用 ——
response.json()只能读取一次响应流
常见写法示例
使用 async/await(推荐):
const response = await fetch('/api/user');
const data = await response.json(); // 自动解析,data 是对象或数组
console.log(data.name);
使用 .then():
fetch('/api/posts')
.then(res => res.json())
.then(data => console.log(data.length));
错误处理不能少
网络失败、状态码异常(如 404、500)、JSON 格式错误都会导致 response.json() 拒绝 Promise,需用 try/catch 或 .catch() 捕获:
- 先检查
response.ok判断 HTTP 状态是否在 200–299 范围 - 再调用
.json(),避免把 HTML 错误页当 JSON 解析(比如 404 返回的是 HTML,会报错)
try {
const response = await fetch('/api/data');
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
} catch (err) {
console.error('解析失败:', err.message);
}
注意流已被读取
response.json() 会消耗响应体流。一旦调用,就不能再用 response.text()、response.blob() 等其他读取方法 —— 否则会报“Failed to execute 'json' on 'Response': body stream is locked”之类错误。
- 如果需要同时获取原始文本和解析结果,先用
response.text(),再手动JSON.parse() - 如果不确定响应是否为 JSON,可先用
response.headers.get('content-type')判断类型


















