【问题标题】:How to concat a json arrays objects values in SQLite如何在 SQLite 中连接 json 数组对象值
【发布时间】:2019-05-02 03:37:41
【问题描述】:

作为更大的选择查询的一部分,我需要从 json 数组的对象中提取值作为逗号分隔的字符串。

我已经设法从 json 对象中取出 json 数组:

SELECT * FROM (SELECT json_extract(Site.Login, '$.Uris') FROM Site);

给出相同结果的第二个变体:

SELECT value FROM json_each(Site.Login), Site WHERE json_each.key = 'Uris';

单行测试给出想要的结果:

SELECT group_concat(json_extract(value, '$.Uri')) as login_uri FROM json_each('[{"Uri":"https://cnn.com"},{"Uri":"https://bbc.com"},{"Uri":"https://reuters.com"}]');

我迷失在矩阵中。我尝试了各种方法来组合上面的查询代码,但我无法取得任何进展。

Site.Login 单元格的示例。 Uri 对象的数量可以从 0 到无穷大。

{
    "Uris": [
            {"Uri":"https://cnn.com"},
            {"Uri":"https://bbc.com"},
            {"Uri":"https://reuters.com"}
    ],
    "Username": "ghhhhhhhhhhhhhfgggggggggggggggg",
    "Password": "hgfhfghfghfgh",
    "PasswordRevisionDate": "2019-01-07T21:51:42.65Z",
    "Totp": "gffffffffffffffffffffffhhhhhhhhhhhhhhhfghghgfh",
    "Name": "hgfhfghfghfghfgh",
    "PasswordHistory": [
        {
            "Password": "ghfghfghfghfghfg",
            "LastUsedDate": "2019-01-07T21:51:42.65Z"
        }
    ]
}

Site 表的完整布局:

CREATE TABLE "Site" (
"Id" varchar primary key not null ,
"FolderId" varchar ,
"UserId" varchar ,
"OrganizationId" varchar ,
"Name" varchar ,
"Notes" varchar ,
"Fields" varchar ,
"PasswordHistory" varchar ,
"Login" varchar ,
"Card" varchar ,
"Identity" varchar ,
"SecureNote" varchar ,
"Favorite" integer ,
"Edit" integer ,
"OrganizationUseTotp" integer ,
"RevisionDateTime" bigint ,
"Type" integer ,
"Data" varchar )

选择查询应返回名为 login_uri 的列,其中包含提取的 json 数组对象值作为连接字符串: https://cnn.com,https://bbc.com,https://reuters.com

【问题讨论】:

    标签: sqlite sqlite-json1


    【解决方案1】:

    你很亲密!

    SELECT group_concat(json_extract(j.value, '$.Uri')) AS login_uri
    FROM site AS s
    JOIN json_each(json_extract(s.login, '$.Uris')) AS j
    

    给予

    login_uri                                          
    ---------------------------------------------------
    https://cnn.com,https://bbc.com,https://reuters.com
    

    如果您希望表中的每一行都给出一个结果行,而不是将整个表中的 all uri 连接在一起形成一个字符串,请在末尾添加 GROUP BY s.id

    【讨论】:

    • 非常感谢。似乎 json_each 关闭 ) 被错误地删除了。
    • @TBK 多哈。固定。
    猜你喜欢
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多