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

Node.js网络爬虫中嵌套复杂JS对象转换为合法JSON的实现方法

爬虫表格数据生成合法JSON的解决方案

问题说明

你看到控制台输出[Object]不是数据结构错误,是JS运行环境的控制台默认会折叠2层以上深度的嵌套对象,仅做显示优化用,实际内存中的数据结构是完整的。

修正优化点

  • 删除冗余操作:代码中反复执行JSON.stringify+JSON.parse属于无效操作,构造完成的JS对象可以直接推入数组,不需要额外序列化反序列化
  • 匹配字段类型:目标JSON中table字段为字符串类型,将循环变量i转为字符串即可匹配格式要求
  • 正确输出JSON:对最终组装完成的数组直接执行JSON.stringify,指定缩进参数即可得到格式化的合法JSON

修改后可直接运行的代码

var submitButton = driver.findElement(By.className('btn btn-primary'));

submitButton.click().then(function () {
    setTimeout(async function () {
        const pagesource = await driver.getPageSource();
        const $ = cheerio.load(pagesource);
        const tableCount = $('.table , .table-bordered').length;
        const tablesJsonArray = [];

        for (let i = 0; i < tableCount; i++) {
            const subjectsJsonArray = [];
            const tableData = $('.table , .table-bordered').eq(i);
            const subjectCount = tableData.children('tbody').children('tr').length;

            for (let j = 0; j < subjectCount; j++) {
                const subjectData = tableData.children('tbody').children('tr').eq(j);
                const subjectName = subjectData.children('td').eq(0).text();
                const year = subjectData.children('td').eq(1).text();
                const credits = subjectData.children('td').eq(2).text();
                const sOrder = subjectData.children('td').eq(3).text();
                const result = subjectData.children('td').eq(4).text();
                const onlineAssignmentResult = subjectData.children('td').eq(5).text();

                subjectsJsonArray.push({
                    subject_name: subjectName.trim(),
                    year: year,
                    credits: credits,
                    s_order: sOrder,
                    result: result,
                    online_assignment_result: onlineAssignmentResult.trim(),
                });
            } 

            tablesJsonArray.push({
                table: i.toString(),
                data: subjectsJsonArray
            });
        }

        // 输出格式化的合法JSON字符串,可直接写入文件或用于接口传输
        const finalLegalJson = JSON.stringify(tablesJsonArray, null, 4);
        console.log(finalLegalJson);
    }, 3000);
});

补充说明

如果你需要在控制台查看完整展开的对象结构做调试,可以替换打印逻辑为console.dir(tablesJsonArray, {depth: null}),即可解除深度限制展开所有层级的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:39:01