在SQLite中避免输出带引号的JSON数据
我在我的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。