如何结合for循环与substr处理JSON对象提取指定字段
解决方法
你的JSON响应是嵌套数组结构,内层数组里除了第一个标题项和最后一个总余额项,其余都是合并了Amount、Type、Balance、Date的字符串。我们可以通过固定位置截取+字符串查找的方式拆分这些字段,具体实现如下:
完整代码实现
if (xhr.status == 200) { console.log("status 200"); const parsedWalletResult = JSON.parse(this.response); const transactionList = parsedWalletResult[0]; // 取出包含所有交易数据的内层数组 // 遍历交易项(跳过第一个标题和最后一个总余额) for (let i = 1; i < transactionList.length - 1; i++) { const currentStr = transactionList[i]; // 1. 提取Amount:示例中所有Amount格式为$X.XX/$XX.XX,固定截取前5位 const amount = currentStr.substr(0, 5).trim(); // 2. 提取Type并确定Balance的起始位置 let type, balanceStartIndex; if (currentStr.includes("Debit")) { type = "Debit"; balanceStartIndex = currentStr.indexOf("Debit") + 5; // Debit长度为5,累加后得到Balance起始点 } else { type = "Credit"; balanceStartIndex = currentStr.indexOf("Credit") + 6; // Credit长度为6,同理 } // 3. 提取Balance:找到日期的起始位置(日期以数字开头),截取中间部分 const dateStartIndex = currentStr.slice(balanceStartIndex).search(/\d/) + balanceStartIndex; const balance = currentStr.substr(balanceStartIndex, dateStartIndex - balanceStartIndex).trim(); // 4. 提取Date:从日期起始位置截取到字符串结尾 const date = currentStr.substr(dateStartIndex).trim(); // 输出单条交易的所有字段 console.log(`第${i}笔交易:`); console.log(`Amount: ${amount}, Type: ${type}, Balance: ${balance}, Date: ${date}`); } // 提取总余额 const totalBalanceStr = transactionList[transactionList.length - 1]; const totalBalance = totalBalanceStr.substr(totalBalanceStr.indexOf("$")).trim(); console.log(`账户总余额:${totalBalance}`); }
关键步骤说明
- 定位数据数组:解析JSON后直接取出内层数组,避免多层嵌套的索引混乱。
- Amount提取:示例中所有交易金额都是
$X.XX或$XX.XX格式,长度固定为5,直接用substr(0,5)截取。 - Type与Balance定位:通过
includes判断交易类型,结合indexOf找到类型字符串的结束位置,以此作为Balance的起始索引。 - Balance与Date拆分:利用正则
search(/\d/)找到Balance之后第一个数字的位置(即日期的起始点),分别截取Balance和Date内容。 - 总余额提取:最后一项是总余额字符串,找到
$的位置后截取后续内容即可。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

