如何将SQLite查询返回的多条结果正确输出为JSON格式
问题原因
- SQL字段引用写法错误:除
b.pay外的所有查询字段都被双引号整体包裹了表别名、点号和字段名。SQLite中双引号用于包裹标识符(表名、列名),当你写"a.businessName"时,数据库会尝试查找名称完全为a.businessName的列,但关联后的表中不存在这个列,SQLite会直接将双引号内的文本作为字符串值返回,最终返回的字段键名带多余引号、值和键名重复。你在DB Browser for SQLite中能正常执行,大概率是写测试SQL时没有加这些多余的双引号,和代码里的SQL写法不一致导致的。 - 结果解构逻辑错误:
const [ schedule ] = await query(...)的写法会从查询返回的结果数组中仅提取第一条记录,因此原本2条记录的结果集最终只返回了单条对象,不符合预期的数组结构。
修复方案
不需要改动路由层逻辑,仅需修正service.js中的两处问题即可:
- 删除SQL语句中所有包裹字段的多余双引号(字段名无特殊字符、空格时不需要用双引号包裹标识符)
- 去掉查询结果的单条解构,直接返回完整结果数组
修改后的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
相关产品推荐
相关产品推荐

