在SQLite中避免输出带引号的JSON数据

编程语言 2026-07-11

我在我的SQLite3数据库中有一个查询,其中一列的结果是通过内置的JSON函数生成的JSON。当我把输出格式也设为JSON时,我本以为这些数据会原样返回,不会再被额外引号包裹。然而,似乎它被转换成了字符串。

作为一个最小例子,在使用 --json 选项启动sqlite CLI(或通过 .mode json 设置模式)之后,我希望查询

select json_array(1);

返回

[{"json_array(1)": [1]}]

但我得到的是

[{"json_array(1)": "[1]"}]

(请注意 [1] 周围的额外引号。)

有没有办法得到我想要的输出?

解决方案

如果你查看 The json_array() function 的文档,在示例中你可以看到它返回带有序列化JSON的文本,而不是对象。

因此如果把它作为表格结果输出,你会得到类似下面的结果

"json_array(1)"
"[1]"

而将查询结果输出为JSON的选项与您调用的JSON函数无关。该选项仅将表格数据转换为JSON。

因此现在 json_array(1) 列名成为JSON属性名,[1] 字符串则是它的值。因此,您所看到的结果就是这样的。

另请注意(来自文档):

SQL类型为TEXT的参数通常会被转换成带引号的JSON字符串。不过,如果该参数是来自另一个json1函数的输出,那么它将以JSON的形式存储。这使得对json_array() 和json_object() 的嵌套调用成为可能。json() 函数也可用于强制将字符串识别为JSON。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章