导出包含 JSON 列且没有双重转义的 SQLite 表

Posted

技术标签:

【中文标题】导出包含 JSON 列且没有双重转义的 SQLite 表【英文标题】:Export SQLite table which contains JSON column without double escaping 【发布时间】:2021-07-31 22:21:48 【问题描述】:

让一个 SQLite 表像这样构建:

create table t(id, j json);
insert into t values (1, '"name": "bob"');
insert into t values (2, '"name": "alice", "age":20, "hobbies":[ "a", "b", "c"] ');

在不转义 JSON 字符串的情况下,将整个表导出为有效 JSON 的最简单方法是什么?

sqlite> .mode json
sqlite> select id, j from t;
["id":1,"j":"\"name\": \"bob\"",
"id":2,"j":"\"name\": \"alice\", \"age\":20, \"hobbies\":[ \"a\", \"b\", \"c\"] "] -- WRONG!

JSON 列可能会有所不同。无法使用 json_extract 函数来做到这一点。期待可解析的 JSON,

["id":1,"j":"name": "bob",
"id":2,"j":"name": "alice", "age":20, "hobbies":[ "a", "b", "c"] ]

【问题讨论】:

【参考方案1】:

使用函数json() 去除jjson_group_array() 列中的转义以进行聚合:

select json_group_array(json_object('id', id, 'j', json(j))) result
from t

请参阅demo。 结果:

result
["id":1,"j":"name":"bob","id":2,"j":"name":"alice","age":20,"hobbies":["a","b","c"]]

【讨论】:

非常感谢!完美运行,无需使用 JSON 模式。

以上是关于导出包含 JSON 列且没有双重转义的 SQLite 表的主要内容,如果未能解决你的问题,请参考以下文章

请求筛选模块被配置为拒绝包含双重转义序列的请求

JSON.NET Parser *似乎*对我的对象进行双重序列化

请求筛选模块被配置为拒绝包含双重转义序列的请求

URL中含有+号,出现错误“请求筛选模块被配置为拒绝包含双重转义序列的请求”的解决方法

牛顿软件。 json serializeObject 字符串包含小数值似乎没有正确转义

从 WCF 服务返回的 JSON 数据包含转义字符