如何在fetch的response.json()中使用JSON.parse的reviver函数?
如何在
response.json() 中使用 JSON.parse 的 reviver 函数? 你说得没错,response.json() 确实不支持直接传入 reviver 参数——这是 Fetch API 里 Body.json() 方法的设计限制,它只封装了默认的 JSON 解析逻辑,没有预留自定义解析器的入口。
你的临时方案思路是对的,但还可以进一步简化:不需要额外用 new Promise 包裹 JSON.parse,因为 JSON.parse 是同步操作,直接返回结果就行,去掉冗余的异步包装:
fetch(url) .then(res => res.text()) .then(text => JSON.parse(text, reviver)) .then(processedData => { // 在这里处理经过reviver处理后的数据 }) .catch(err => { // 别忘了捕获请求或解析错误 });
如果习惯用 async/await 写法,代码会更直观易读:
async function fetchAndParseWithReviver(url) { const response = await fetch(url); const rawText = await response.text(); return JSON.parse(rawText, reviver); } // 调用示例 fetchAndParseWithReviver(yourUrl) .then(data => { // 处理数据 }) .catch(error => { // 处理异常情况 });
目前来说,这就是最优的实现方式了——因为 Fetch API 没有提供直接在 json() 方法中传入 reviver 的途径,我们只能绕开封装好的 json(),手动走“获取文本→自定义解析”的流程。上面的写法已经去掉了多余的 Promise 包装,和原生 json() 的性能几乎没有差别,只是多了一步文本读取,但这是不可避免的。
内容的提问来源于stack exchange,提问作者allez l'OM
相关产品推荐
相关产品推荐

