如何在JavaScript调用REST API时去除HTTP头,提取指定JSON内容
问题核心错误原因
fetch是异步API,返回值是Promise实例,不是接口返回的响应对象,你直接对smth执行delete操作完全不会生效- 你不需要手动处理响应头,浏览器原生的
fetchAPI已经提供了直接提取响应体的方法,不需要手动剥离响应头内容
正确实现方案
你不需要手动处理响应头,直接通过响应对象的json()方法就可以拿到纯响应体的JSON解析结果,再提取你需要的字段转成字符串即可,完整代码如下:
const gemini = async () => { const burl = 'https://api.sandbox.gemini.com' const query = '/v1/pubticker/ethusd' const url = burl + query // 等待获取响应对象 const response = await fetch(url) // 自动解析响应体为JSON对象,自动过滤所有响应头 const resJson = await response.json() // 组装你需要的目标数据结构 const target = { ...resJson.volume, last: resJson.last } // 转为JSON字符串可直接存入数据库 return JSON.stringify(target) } export default gemini
上述代码返回的标准JSON字符串格式为:
{"ETH":"8232.886562","USD":"38693689.50955448","timestamp":1636394400000,"last":"4786.83"}
如果你确实需要你示例中给出的非标准格式(即volume对象后直接接逗号加last字段的格式),可以用字符串截取的方式实现,但稳定性远低于直接操作JSON对象:
const gemini = async () => { const burl = 'https://api.sandbox.gemini.com' const query = '/v1/pubticker/ethusd' const url = burl + query const response = await fetch(url) // 直接拿响应体原始字符串 const rawText = await response.text() // 匹配截取你需要的内容 const matchRes = rawText.match(/"volume":({.*}),"last":"([^"]+)"/) const targetStr = `${matchRes[1]},"last":"${matchRes[2]}"` return targetStr }
内容的提问来源于stack exchange,提问作者xIHA
相关产品推荐
相关产品推荐

