json_extract没有保留双引号,并不表示内容被截掉或损坏;这是SQLite对该函数返回类型的既定处理:只给一个路径且命中JSON字符串时,返回去引号的SQL TEXT;命中JSON null时返回SQL NULL;命中数字时返回INTEGER或REAL;命中布尔时返回整数0或1;只有单路径命中对象或数组,或传入多个路径时,才返回JSON文本形式的结构。因此,不能把单路径拿到的标量结果一律再当JSON文本反解,也不能仅凭字符串外围没有引号就判断原文丢失。还需先核对当前SQLite实际版本以及JSON功能是否可用;SQLite JSON函数从3.38.0起默认内置,但仍可能在编译时被省略。

适用
本题适用于海口琼山区台式电脑上运行、使用SQLite数据库并调用json_extract读取JSON字段的应用。判断对象是SQLite的json_extract行为,不是Windows系统接口,也不是Python的json库;即使应用用某种语言调用SQLite,返回值仍按SQLite的SQL类型规则理解。先确认实际库版本、JSON函数是否编入、SQL语句是否只含一个路径,以及路径指向的是标量、对象还是数组。
观察
先核对实际SQLite版本和JSON功能是否可用:低于3.38.0的构建仍可能启用JSON1扩展,不能仅凭较旧版本就说不可用;新版本也可能编译省略。以实际构建的函数能力为准,再核返回类型。再用已有去敏SQL观察同一路径的返回:单路径命中JSON字符串,得到不带引号的TEXT属预期;命中JSON null得到NULL;命中数字得到INTEGER或REAL;命中布尔得到0或1;命中对象或数组,或使用多路径,才会得到JSON文本。随后检查上层是否对所有返回值统一执行JSON解析;若单路径标量被再次当JSON文本反解而报错,应回到SQL类型处理。最后对比原始JSON片段与日志,确认双引号仍在原JSON文本中,而非写回时被修改。
风险
主要风险是把“去引号的TEXT”误判为JSON损坏,进而重复加引号、二次序列化或改写原字段,导致数据变形;单路径JSON null返回SQL NULL,与路径不存在等情形在返回值上都需要结合上下文区分,应用层若只凭NULL判断也容易误判;把数字、布尔统一转成文本还会丢失SQL类型差异。排查时不要改生产库、重发写入或制造崩溃来验证。
下一步
整理实际SQLite版本与编译配置、去敏的表结构和字段类型、原SQL语句、相关JSON片段、返回值的SQL类型及上层解析日志,先确认功能可用性和单路径、多路径差异,再决定应用层如何按类型取值。需要进一步咨询时,可拨打400-877-9605;电脑快修网是信息展示与第三方维修对接平台,该号码只作咨询,实际范围和安排需确认。