导出包含 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()
去除j
和json_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中含有+号,出现错误“请求筛选模块被配置为拒绝包含双重转义序列的请求”的解决方法