使用axios-get-json-response时JSON解析编码错误求助
解决axios-get-json-response处理带乱码前缀JSON的编码问题
问题分析
你调用CoinGecko API返回的响应包含非JSON的控制字符前缀(\x03\x0E�)和后缀(\x03),导致getJson.parse无法正确解析。而Tronscan API返回标准纯JSON,所以能正常处理。核心问题是axios-get-json-response的默认配置和parse方法未处理这类带冗余字符的响应。
解决方案
1. 手动清理响应无效字符
解析前过滤JSON字符串前后的非有效字符,只保留{到}之间的核心内容。
2. 自定义axios响应处理
绕过getJson.axiosConfiguration的默认逻辑,直接获取原始响应文本,手动清理后再解析。
修改后的代码示例
针对!doge命令的调整如下:
client.on('messageCreate', async (message) => { if (message.content.startsWith('!doge')){ const a = Math.random() * (5-0) + 1 var b = parseInt(a); console.log(b) const { data: balanceData } = await axios.get( `https://dogechain.info/chain/Dogecoin/q/addressbalance/DQzs4yzLoR3UJ3YdCRSD7eEeW3kv5gdca2` ); Promise.try(() => { // 不使用getJson默认配置,直接获取原始文本 return axios.get("https://api.coingecko.com/api/v3/simple/price?ids=dogecoin&vs_currencies=usd", { responseType: 'text' }).then((response) => { console.log(response.data) // 提取有效JSON部分:匹配第一个{到最后一个}的内容 const cleanJsonStr = response.data.match(/{[\s\S]*}/)[0]; // 手动解析JSON const parsedData = JSON.parse(cleanJsonStr); // 修正取值逻辑:CoinGecko返回结构为{dogecoin: {usd: 价格}} const dataprice = parsedData.dogecoin.usd; const checkprice = balanceData * dataprice; message.reply(`Le solde du wallet dogecoin simcash est ${checkprice}usd`); if (b == 5) { message.reply(`N'hésitez pas a mettre mon code d'affiliation simcash XMHX3 cela me soutiens énormement <3 clarity`); } }) }) } })
额外说明
- 你之前代码错误地尝试从
parsedJsonbalance.totalAssetInUsd取值,但CoinGecko API返回的结构是{dogecoin: {usd: 数值}},该问题已在修改后的代码中修正。 - 若后续其他API也出现类似带冗余字符的响应,可复用
match(/{[\s\S]*}/)[0]提取有效JSON,该正则会忽略前后无效字符,仅保留核心JSON结构。
内容的提问来源于stack exchange,提问作者ClarityGuardian
相关产品推荐
相关产品推荐

