You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合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}`);
}

关键步骤说明

  1. 定位数据数组:解析JSON后直接取出内层数组,避免多层嵌套的索引混乱。
  2. Amount提取:示例中所有交易金额都是$X.XX或$XX.XX格式,长度固定为5,直接用substr(0,5)截取。
  3. Type与Balance定位:通过includes判断交易类型,结合indexOf找到类型字符串的结束位置,以此作为Balance的起始索引。
  4. Balance与Date拆分:利用正则search(/\d/)找到Balance之后第一个数字的位置(即日期的起始点),分别截取Balance和Date内容。
  5. 总余额提取:最后一项是总余额字符串,找到$的位置后截取后续内容即可。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:10:19