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

如何将SQLite查询返回的多条结果正确输出为JSON格式

问题原因
  • SQL字段引用写法错误:除b.pay外的所有查询字段都被双引号整体包裹了表别名、点号和字段名。SQLite中双引号用于包裹标识符(表名、列名),当你写"a.businessName"时,数据库会尝试查找名称完全为a.businessName的列,但关联后的表中不存在这个列,SQLite会直接将双引号内的文本作为字符串值返回,最终返回的字段键名带多余引号、值和键名重复。你在DB Browser for SQLite中能正常执行,大概率是写测试SQL时没有加这些多余的双引号,和代码里的SQL写法不一致导致的。
  • 结果解构逻辑错误:const [ schedule ] = await query(...)的写法会从查询返回的结果数组中仅提取第一条记录,因此原本2条记录的结果集最终只返回了单条对象,不符合预期的数组结构。
修复方案

不需要改动路由层逻辑,仅需修正service.js中的两处问题即可:

  1. 删除SQL语句中所有包裹字段的多余双引号(字段名无特殊字符、空格时不需要用双引号包裹标识符)
  2. 去掉查询结果的单条解构,直接返回完整结果数组

修改后的service.js代码如下:

const getSchedule = async ( operatorId ) => {
    const text = `
        SELECT a.businessName
            , b.opTitle
            , b.pay
            , b.startTime
            , b.endTime
            , a.addressLine1
            , a.addressLine2
            , a.city
            , a.state
            , a.zip
        from businesses a join ops b
        on a.id=b.businessId where b.operatorId= $1;
    `;
    // 去掉外层的[]解构,直接返回完整的查询结果数组
    const schedule = await query( text, [ operatorId ] );
    return schedule;
};

如果你使用的SQLite驱动要求用?作为参数占位符,只需要把SQL里的$1换成?即可,其余逻辑不需要调整。

修复后接口会直接返回符合预期的2条记录组成的数组,字段名、值、结构完全匹配要求,不需要额外做格式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:51:27